锁定老帖子 主题:『类型』hibernate3不能查询中文?
该帖已经被评为精华帖
|
|
---|---|
作者 | 正文 |
发表时间:2005-06-03
tomcat 4.1 + hibernate 3 + jdk1.42 配置文件: <?xml version='1.0' encoding='utf-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> <property name="hibernate.connection.driver_class">org.gjt.mm.mysql.Driver</property> <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> <property name="hibernate.connection.useUnicode">true</property> <property name="hibernate.connection.characterEncoding">GBK</property> <property name="connection.url"><![CDATA[jdbc:mysql://localhost:3306/qp?unicode=true&characterEncoding=GBK]]></property> <!--<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/qp</property>--> <property name="hibernate.connection.username">root</property> <property name="hibernate.connection.password"></property> <!--<property name="hibernate.connection.pool_size">1</property>--> <!-- Mapping files --> <mapping resource="com/anaconda/qp/mapping/msg/MSGBean.hbm.xml"/> <mapping resource="com/anaconda/qp/mapping/item/ItemBean.hbm.xml"/> <mapping resource="com/anaconda/qp/mapping/cartype/CarTypeBean.hbm.xml"/> <mapping resource="com/anaconda/qp/mapping/provider/ProviderBean.hbm.xml"/> <mapping resource="com/anaconda/qp/mapping/customer/CustomerBean.hbm.xml"/> <mapping resource="com/anaconda/qp/mapping/company/CompanyBean.hbm.xml"/> <mapping resource="com/anaconda/qp/mapping/department/DepartmentBean.hbm.xml"/> <mapping resource="com/anaconda/qp/mapping/employee/EmployeeBean.hbm.xml"/> <mapping resource="com/anaconda/qp/mapping/warehouse/WarehouseBean.hbm.xml"/> <mapping resource="com/anaconda/qp/mapping/stock/StockBean.hbm.xml"/> <mapping resource="com/anaconda/qp/mapping/stockrejectindenture/StockRejectIndentureBean.hbm.xml"/> <mapping resource="com/anaconda/qp/mapping/msgtest/MSGTestBean.hbm.xml"/> <mapping resource="com/anaconda/qp/mapping/module/ModuleBean.hbm.xml"/> <mapping resource="com/anaconda/qp/mapping/empauth/EmpAuthBean.hbm.xml"/> <mapping resource="com/anaconda/qp/mapping/pinyin/PinYinBean.hbm.xml"/> <mapping resource="com/anaconda/qp/mapping/pinyindetail/PinYinDetailBean.hbm.xml"/> <!--<mapping resource="com.anaconda.qp.mapping..hbm.xml"/>--> </session-factory> </hibernate-configurati 错误提示信息: 数据库里面有这样的测试数据(一是中文的一) 一0 一1 一10 我用hql查询 String hql = "from MSGBean where CHINESE like '%一%'"; Query q = session.createQuery(hql); 竟然查不出数据 再用 String hql = "from MSGBean where CHINESE like '%0%'"; Query q = session.createQuery(hql); 得到正确结果 我想是中文的问题,谁能告诉我是 为什么,如何 解决?谢谢! 环境: hibernate3+mysql4.0.20+jdk1.42 连接的编码为GBK 奇怪的是我同样的代码,同样的配置,在hibernate2上完全没有上述问题 你的分析: 奇怪的是我同样的代码,同样的配置,在hibernate2上完全没有上述问题 难道是hibernate3的问题? 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2005-06-05
你在控制台把sql语句打印出来,看看有没有生成正确的sql语句
|
|
返回顶楼 | |
发表时间:2005-06-05
相关问题信息:
http://forum.hibernate.org/viewtopic.php?t=942108 |
|
返回顶楼 | |
发表时间:2005-06-05
真是谢谢楼上的了
链接里面回答: 用点位符,再用setString 不要在HQL中直写中文。 但我始终不明白的是,为什么h2行而h3不行了? 难道实现机制变了? 现在我用Critiria查询,代替hql |
|
返回顶楼 | |
发表时间:2005-06-06
h3与h2的hql的分析机制变了,h3用antlr来解析hql,估计是antlr的BUG
|
|
返回顶楼 | |
发表时间:2005-06-14
那请问有没有针对这个BUG的解决办法?谢谢!
|
|
返回顶楼 | |
发表时间:2005-06-14
你那种拼HQL的用法根本就是错的,只要你改成适用占位符就行了。自己错误的用法不能怪Hibernate。
|
|
返回顶楼 | |
发表时间:2005-06-14
确实不能用拼HQL的用法,拼HQL还容易有SQL注射攻击.
|
|
返回顶楼 | |
发表时间:2005-07-01
这个问题我也遇到过,现在都改为占位符了。
|
|
返回顶楼 | |
发表时间:2005-07-01
robbin 写道 你那种拼HQL的用法根本就是错的,只要你改成适用占位符就行了。自己错误的用法不能怪Hibernate。
这个用法确实不合理,但是并不能应此而否认Hibernate的bug |
|
返回顶楼 | |