Hibernate 在执行 select 语句时发生中文乱码

Java_One 2007-01-22 01:03:55
最近自己在做一个小的Web项目,采用Struts+Hibernate,接近尾声时才发现一个中文乱码问题,
即,在执行查询语句时,中文出现乱码。
我郁闷啊,其他的一些中文操作都很正常,唯独在执行查询时发生乱码,难道Hibernate在生成不同的DML语句时采用不同的编码方式?请高手指教。
我的配置:
Tomcat 5.5
MySQL 5.1
Struts 1.2
Hibernate 3.0

问题解决马上散分
...全文
402 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Java_One 2007-01-22
  • 打赏
  • 举报
回复
谢谢楼上的几位了,问题已经解决,解决方案就是更换了Hibernate3.jar包,我换成了3.2的。

另外想问个关于DAO层的问题,大家都知道DAO层是非常强大的,在一个稍大点的应用中,
我喜欢把他单独抽象成为一个AbstractDAO,他封装了一切对数据库操作的方法,但有一
点我感觉,就是程序的灵活性可能会有所降低。

如楼上所说,可以用 where username=? 来解决问题,但是现在你的AbstractDAO可能会派不上用场,如:
protected static List findList(String hql) {
List list = null;
try {
AbstractDAO.beginTransaction();
Query query = session.createQuery(hql);
session.flush();
tx.commit();
if (query != null) {
list = query.list();
}

} catch (HibernateException he) {
he.printStackTrace();
log.error("AbstractDAO.findList Exception!", he);
} finally {
HibernateSessionFactory.colse(session);
}
return list;
}
这个方法的可复用性是极高的,你可以在整个应用中都可以用他来执行查找,只要给他个HQL语句,
他就能给你一个相对应的对象集合.

但反过来想,你的这个方法是有固定格式的,你并不能动态的设置你的方法为,
Query q = session.createQuery("from User where username=?");
q.setParameter(0,"张三");
如果是这样,很有可能你的没一个查找都要指定一个类似与这样的方法。

就复用和灵活来说,我们应该使用哪一种方法呢?
yzh963 2007-01-22
  • 打赏
  • 举报
回复
建议更换jar包,我用hibernate时也经常出现jar版本混乱,弄好使一个都不敢轻意换,去官方下载,如果用的HQL应该是楼上几位说的那样
yuzhenbj 2007-01-22
  • 打赏
  • 举报
回复
我也碰见了,以上都不是解决办法;最根本的解决办法就是更换jar包,使用3.0.5到3.1之间的版本

如果这么改:hibernate.query.factory_class org.hibernate.hql.classic.ClassicQueryTranslatorFactory
在执行删除时有问题!
如果换成3.2的jar,回报session is closed...的错误(好像3.2中自动关闭session)
Jeff的后花园 2007-01-22
  • 打赏
  • 举报
回复
有兩种解決方案
第一种,數據庫支持語言可以設置成UTF-8,具體選哪裏,以後說,免得摟主TJ了該貼。
第二种,使用捆綁數據的方式,有點像我上面那位說的
jowood_qq 2007-01-22
  • 打赏
  • 举报
回复
你是用的HQL吗?
如果是,那你应该用 form table as a where a.username=?
把问号给替换掉就可以了
  • 打赏
  • 举报
回复
好象是
hibernate.query.factory_class org.hibernate.hql.classic.ClassicQueryTranslatorFactory

我记得好象是这个...
  • 打赏
  • 举报
回复
改方言.
<property name="dialect">org.hibernate.dialect.HSQLDialect</property>
Java_One 2007-01-22
  • 打赏
  • 举报
回复
补充(接上):
更确切的说应该是where子句的时候出现乱码,如:where username='张三',在执行时就变成了where username='????????',
注:页面上接过来的中文很正常

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧