论坛首页 Java企业应用论坛

『类型』hibernate3不能查询中文?

浏览 38282 次
该帖已经被评为精华帖
作者 正文
   发表时间: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的问题?
   发表时间:2005-06-05  
你在控制台把sql语句打印出来,看看有没有生成正确的sql语句
0 请登录后投票
   发表时间:2005-06-05  
相关问题信息:

http://forum.hibernate.org/viewtopic.php?t=942108
0 请登录后投票
   发表时间:2005-06-05  
真是谢谢楼上的了

链接里面回答:

用点位符,再用setString
不要在HQL中直写中文。

但我始终不明白的是,为什么h2行而h3不行了?

难道实现机制变了?


现在我用Critiria查询,代替hql
0 请登录后投票
   发表时间:2005-06-06  
h3与h2的hql的分析机制变了,h3用antlr来解析hql,估计是antlr的BUG
0 请登录后投票
   发表时间:2005-06-14  
那请问有没有针对这个BUG的解决办法?谢谢!
0 请登录后投票
   发表时间:2005-06-14  
你那种拼HQL的用法根本就是错的,只要你改成适用占位符就行了。自己错误的用法不能怪Hibernate。
0 请登录后投票
   发表时间:2005-06-14  
确实不能用拼HQL的用法,拼HQL还容易有SQL注射攻击.
0 请登录后投票
   发表时间:2005-07-01  
这个问题我也遇到过,现在都改为占位符了。
0 请登录后投票
   发表时间:2005-07-01  
robbin 写道
你那种拼HQL的用法根本就是错的,只要你改成适用占位符就行了。自己错误的用法不能怪Hibernate。


这个用法确实不合理,但是并不能应此而否认Hibernate的bug
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics