日期:2014-05-20  浏览次数:20715 次

一个非常怪异的hibernate问题?
这是那个方法的代码
public Integer queryIdByAccount(User u) throws Exception {
configuration = new Configuration().configure();
sessionFactory = configuration.buildSessionFactory();
session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
System.out.println(u.getUsername()+"\t"+u.getPassword());
List<User> list = session.createQuery("from User u where u.username=:username and u.password=:password")
.setString("username", u.getUsername().trim())
.setString("password", u.getPassword().trim())
.list();
System.out.println("list.size()="+list.size());
try{
if(list.size()>0)
{
User uu = list.get(0);
return uu.getId();
}
}finally{
tx.commit();
session.close();
}
return null;
}

数据库中有三条记录

mysql> select * from user;
+----+-----------+----------+
| id | username | password |
+----+-----------+----------+
| 1 | huang hao | 123456 |
| 2 | 黄皓 | 222 |
| 3 | assdf | 32123 |
+----+-----------+----------+
3 rows in set (0.03 sec)

当我查询非中文数据时,也就是第1或第3条能正确查出来,
但是查询第二条数据时,却不能查询出来
应该不是中文乱码问题,因为我在dao中打印了一下
System.out.println(u.getUsername()+"\t"+u.getPassword());
可以打印出来,不是乱码
黄皓 222
但是查询的时候确是空,悲剧,
Hibernate: select user0_.id as id0_, user0_.username as username0_, user0_.password as password0_ from user user0_ where user0_.username=? and user0_.password=?
list.size()=0
=========null=========

求各位高手帮忙看看,是哪里的问题

------解决方案--------------------
select user0_.id as id0_, user0_.username as username0_, user0_.password as password0_ from user user0_ where user0_.username='黄皓' and user0_.password='222'
贴到数据库中能查出来吗?

------解决方案--------------------
初步设想是缓存问题。
------解决方案--------------------
u.getUsername()是乱码吗
------解决方案--------------------
那是因为你的级联操作带来的后果,你看看你的配置文件一定是cascade=all的,把这个属性去掉就不会发生这样的事情了
------解决方案--------------------
这么看代码 貌似没有问题。。 不过用了hibernate为什么还自己来控制事物。。。。。
------解决方案--------------------
添加过滤器,字符集使用UTF-8
------解决方案--------------------
不至于是空格问题吧。。
------解决方案--------------------
你的数据库编码是和你的项目对应吗? 是UTF-8吗?
------解决方案--------------------
在DAO中已经打印出信息,那么就应该和 hibernate没关系
楼主应该检查查询后的数据存在,转发的代码,看是否有纰漏
------解决方案--------------------
捕获异常