Hibernate/JPA常見異常分析與解決
阿新 • • 發佈:2019-02-13
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"><br>
??? ??? ??? <value><br>
??? ??? ??? ??? <span style="color: #ff0000;">hibernate.query.factory_class=org.hibernate.hql.classic.ClassicQueryTranslatorFactory</span>
<br>
??? ??? ??? ??? hibernate.dialect=org.hibernate.dialect.MySQLDialect<br>
??? ??? ??? ??? hibernate.show_sql=true<br>
??? ??? ??? ??? hibernate.format_sql=true<br>
??? ??? ??? </value><br>
??? </property>
??? 方法2:在JDK目錄jire/lib/ext目錄下放置:com.springsource.antlr-2.7.7.jar,該方法在當前的環境下<span style="color: #ff0000;">未測試</span>
??? <span style="color: #ff0000;">成功!</span>
??? (3)異常原因:Hibernate3.0以上版本採用新的基於ANTLR的HQL/SQL查詢翻譯器,在Hibernate的配置檔案中,
??? hibernate.query.factory_class屬性是用來選擇查詢翻譯器的,網上有兩中說法:<br>
??? <span style="color: #ff0000;">指定Hibernate3.0以上的查詢翻譯器:</span>
(這種配置不支援批量更新語句以及中文作為查詢條件)<br>
??? hibernate.query.factory_class= org.hibernate.hql.ast.ASTQueryTranslatorFactory <br>
??? <span style="color: #ff0000;">指定Hibernate2.1以上的查詢翻譯器 :</span>
(支援中文作為查詢條件但不支援批量更新)<br>
??? hibernate.query.factory_class= org.hibernate.hql.classic.ClassicQueryTranslatorFactory
?
??? 在我的測試環境中,配置ASTQueryTranslatorFactory任然不能解決本異常,只能配置成:
??? ClassicQueryTranslatorFactor;而在該情況下又<span style="color: #ff0000;">不支援中文作為查詢條件!</span>
?
??? [size=10pt; font-family: Verdana;" lang="EN]ANTLR[/size]
[size=10pt;]是用純[/size]
[size=10pt; font-family: Verdana;" lang="EN]Java[/size]
[size=10pt;]語言編寫出來的一個編譯工具,它可生成[/size]
[size=10pt; font-family: Verdana;" lang="EN]Java[/size]
[size=10pt;]語言或者是[/size]
[size=10pt; font-family: Verdana;" lang="EN]C++[/size]
[size=10pt;]的詞法和語法分析器,並[/size]
??? [size=10pt;]可產生語法分析樹並對該樹進行遍歷。[/size]
[size=10pt; font-family: Verdana;" lang="EN]ANTLR[/size]
[size=10pt;]由於是純[/size]
[size=10pt; font-family: Verdana;" lang="EN]Java[/size]
[size=10pt;]的,因此可以安裝在任意平臺上,但是需要[/size]
[size=10pt; font-family: Verdana;" lang="EN]JDK[/size]
??? [size=10pt;]的支援。[/size]
2. Hibernate支援中文作為查詢條件
??? (1) 產生環境:查詢中文時? hql語句在生成的語句中把中文顯示為亂碼。
??? (2) 解決方法:在hibernate配置檔案中加入:
???????? <property name="hibernate.query.factory_class"><br>
??????????????????? org.hibernate.hql.ast.ASTQueryTranslatorFactory
???????? </property>
???????? <property name="connection.useUnicode">true</property> <br>
???????? <property name="connection.characterEncoding">UTF-8</property>
3.
??? (1)產生環境:SpringMVC3.0.5+com.springsource.org.hibernate-3.3.2.GA+SpringDM1.2.1
??? (2)解決方法:
??? 方法1:在hibernateProperties中新增紅色背景屬性設定。
??? <property name="hibernateProperties"><br>
??? ??? ??? <value><br>
??? ??? ??? ??? <span style="color: #ff0000;">hibernate.query.factory_class=org.hibernate.hql.classic.ClassicQueryTranslatorFactory</span>
<br>
??? ??? ??? ??? hibernate.dialect=org.hibernate.dialect.MySQLDialect<br>
??? ??? ??? ??? hibernate.show_sql=true<br>
??? ??? ??? ??? hibernate.format_sql=true<br>
??? ??? ??? </value><br>
??? </property>
??? 方法2:在JDK目錄jire/lib/ext目錄下放置:com.springsource.antlr-2.7.7.jar,該方法在當前的環境下<span style="color: #ff0000;">未測試</span>
??? <span style="color: #ff0000;">成功!</span>
??? (3)異常原因:Hibernate3.0以上版本採用新的基於ANTLR的HQL/SQL查詢翻譯器,在Hibernate的配置檔案中,
??? hibernate.query.factory_class屬性是用來選擇查詢翻譯器的,網上有兩中說法:<br>
??? <span style="color: #ff0000;">指定Hibernate3.0以上的查詢翻譯器:</span>
(這種配置不支援批量更新語句以及中文作為查詢條件)<br>
??? hibernate.query.factory_class= org.hibernate.hql.ast.ASTQueryTranslatorFactory <br>
??? <span style="color: #ff0000;">指定Hibernate2.1以上的查詢翻譯器 :</span>
(支援中文作為查詢條件但不支援批量更新)<br>
??? hibernate.query.factory_class= org.hibernate.hql.classic.ClassicQueryTranslatorFactory
?
??? 在我的測試環境中,配置ASTQueryTranslatorFactory任然不能解決本異常,只能配置成:
??? ClassicQueryTranslatorFactor;而在該情況下又<span style="color: #ff0000;">不支援中文作為查詢條件!</span>
?
??? [size=10pt; font-family: Verdana;" lang="EN]ANTLR[/size]
[size=10pt;]是用純[/size]
[size=10pt; font-family: Verdana;" lang="EN]Java[/size]
[size=10pt;]語言編寫出來的一個編譯工具,它可生成[/size]
[size=10pt; font-family: Verdana;" lang="EN]Java[/size]
[size=10pt;]語言或者是[/size]
[size=10pt; font-family: Verdana;" lang="EN]C++[/size]
[size=10pt;]的詞法和語法分析器,並[/size]
??? [size=10pt;]可產生語法分析樹並對該樹進行遍歷。[/size]
[size=10pt; font-family: Verdana;" lang="EN]ANTLR[/size]
[size=10pt;]由於是純[/size]
[size=10pt; font-family: Verdana;" lang="EN]Java[/size]
[size=10pt;]的,因此可以安裝在任意平臺上,但是需要[/size]
[size=10pt; font-family: Verdana;" lang="EN]JDK[/size]
??? [size=10pt;]的支援。[/size]
2. Hibernate支援中文作為查詢條件
??? (1) 產生環境:查詢中文時? hql語句在生成的語句中把中文顯示為亂碼。
??? (2) 解決方法:在hibernate配置檔案中加入:
???????? <property name="hibernate.query.factory_class"><br>
??????????????????? org.hibernate.hql.ast.ASTQueryTranslatorFactory
???????? </property>
???????? <property name="connection.useUnicode">true</property> <br>
???????? <property name="connection.characterEncoding">UTF-8</property>
3.