问题描述
根据项目要求,在每个表中加了删除标志deleted_flag,删除用1标志,未删除用0标志.在用hibernate本身的级联查询会把之前的子表已经删除的数据也检索出来.求最好的解决方法.问题补充:如果是一对一呢?怎么解决/您这上面只有对集合进行问题补充:没有其他方法了吗?把one-to-one改成one-to-many,也太奇怪了.换个角度来说,就是换了它们2者的关系了
解决方案
使用Filter引用http://www.qqgb.com/Program/Java/JavaJC/Program_158788.html <set name="employees" lazy="true"><key column="dept_id"/><one-to-many class="Employee"/><filter name="effectiveDate" condition=":asOfDate BETWEEN eff_start_dt and eff_end_dt"/> </set></class>Session session = ...;session.enabledFilter("effectiveDate").setParameter("asOfDate", new Date());List results = session.createQuery("from Employee as e where e.salary > :targetSalary").setLong("targetSalary", new Long(1000000)).list();
解决方案二:
增加where条件或者设置filter
解决方案三:
还有一个方法。刚同事跟我讲的。可以在hbm.xml的<class>里面写一个where。这个属性是有的。然后你可以写sql/hql(不记得是写哪个了)。这样就可以过滤了。你的where写在子类就好。你试试吧。
解决方案四:
没有什么奇怪的,大家都这样用,你不是“求最好的解决方法. ”吗?一对一映射成一对多也是大家一至推推荐的做法,从你的操作上面还有从你的效果方面都是最佳选择。其它方法就是写HQL了。没别的窍门了。
解决方案五:
你配置了lazy属性就OK啊!去我博客里有这样的关于hibernate的一些属性的文章。
解决方案六:
你把one-to-one 映射成one-to-many就行了。这样特殊处理一下。一般都这样做。。。