Hibernate/JPA常见异常分析与解决
1. ClassNotFoundException: org.hibernate.hql.ast.HqlToken
??? (1)产生环境:SpringMVC3.0.5+com.springsource.org.hibernate-3.3.2.GA+SpringDM1.2.1
??? (2)解决方法:
??? 方法1:在hibernateProperties中添加红色背景属性设置。
??? <property name="hibernateProperties">
??? ??? ??? <value>
??? ??? ??? ??? hibernate.query.factory_class=org.hibernate.hql.classic.ClassicQueryTranslatorFactory
??? ??? ??? ??? hibernate.dialect=org.hibernate.dialect.MySQLDialect
??? ??? ??? ??? hibernate.show_sql=true
??? ??? ??? ??? hibernate.format_sql=true
??? ??? ??? </value>
??? </property>
??? 方法2:在JDK目录jire/lib/ext目录下放置:com.springsource.antlr-2.7.7.jar,该方法在当前的环境下未测试
??? 成功!
??? (3)异常原因:Hibernate3.0以上版本采用新的基于ANTLR的HQL/SQL查询翻译器,在Hibernate的配置文件中,
??? hibernate.query.factory_class属性是用来选择查询翻译器的,网上有两中说法:
??? 指定Hibernate3.0以上的查询翻译器:(这种配置不支持批量更新语句以及中文作为查询条件)
??? hibernate.query.factory_class= org.hibernate.hql.ast.ASTQueryTranslatorFactory
??? 指定Hibernate2.1以上的查询翻译器 :(支持中文作为查询条件但不支持批量更新)
??? hibernate.query.factory_class= org.hibernate.hql.classic.ClassicQueryTranslatorFactory
?
??? 在我的测试环境中,配置ASTQueryTranslatorFactory任然不能解决本异常,只能配置成:
??? ClassicQueryTranslatorFactor;而在该情况下又不支持中文作为查询条件!
?
??? ANTLR是用纯Java语言编写出来的一个编译工具,它可生成Java语言或者是C++的词法和语法分析器,并
??? 可产生语法分析树并对该树进行遍历。ANTLR由于是纯Java的,因此可以安装在任意平台上,但是需要JDK
??? 的支持。
2. Hibernate支持中文作为查询条件
??? (1) 产生环境:查询中文时? hql语句在生成的语句中把中文显示为乱码。
??? (2) 解决方法:在hibernate配置文件中加入:
???????? <property name="hibernate.query.factory_class">
??????????????????? org.hibernate.hql.ast.ASTQueryTranslatorFactory
???????? </property>
???????? <property name="connection.useUnicode">true</property>
???????? <property name="connection.characterEncoding">UTF-8</property>
3.