Linux安全网 - Linux操作系统_Linux 命令_Linux教程_Linux黑客

会员投稿 投稿指南 本期推荐:
搜索:
您的位置: Linux安全网 > Linux集群 > Architecture > » 正文

Hibernate/JPA常见异常分析与解决

来源: SpringsFeng 分享至:

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.


Tags: Hibernate JPA
分享至:
最新图文资讯
1 2 3 4 5 6
验证码:点击我更换图片 理智评论文明上网,拒绝恶意谩骂 用户名:
关于我们 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 发展历史