解决compare出错引发的hibernate查询问题

昨天下午同事突然出现hibernate查询问题,vo对象的子表对象集中只有1条数据,但是对应的数据库却是三条。

首先想到的是懒加载的问题,因为业务需要我做了封装,查询单条记录并未使用get,而是封装了业务条件,使用了find,但是经验证排除。

将hibernate打印出的sql放入DB中执行之后发现确实查询出了所有记录。当时比较疑惑,但是确实是将解决问题的重心放在hibernate之上,后来lizhi92574提示应该重写equals与hashcode方法,才突然想起,hibernate子表set用的是SortedSet接口,对于传入对象是有要求的,equals或compare方法总之是要保证对象之间比较的不相等性。于是马上回过头查看vo父类(在此次开发中将vo,action,manager,dao层都进行了封装与抽象)的compare方法,发现出错,竟然比较的是两个相同的对象.....bs下自己,公共的东西一定要谨慎再谨慎啊。

想请教的问题:
在昨天的排错过程中,发现在lazy设置成false的情况下,在子表Set的对应set方法执行时,hibernate并未打印对应子表的查询语句,而是用到此Set集合之时,hibernate才打印了查询语句,是否说明lazy=false没有效果?求解。

顺便学到了,原来hibernate在代码层面可以指定强制使用懒加载的。

你可能感兴趣的:(DAO,sql,Hibernate)