日期:2014-05-17  浏览次数:20719 次

hibernate中如何在查询主表某记录时根据条件级联查询子表记录
在hibernate中,对象A与对象B是一对多的关系,当我根据条件查询a时,需要同时根据条件查询与a相关联的b。请我我是要在A的dao层做两次hql查询还是在action中调用A、B两个dao中的方法,或者是别的处理方式?本人是新手,希望各位高手不惜赐教!谢谢!(如果没明白我的意思烦请告之)

------解决方案--------------------
Hibernate3.x过滤器,例子 
<filter-def name="effectiveDate"> 
 <filter-param name="asOfDate" type="date"/> 
</filter-def> 

<class name="Employee" ...> 
 ... 
 <many-to-one name="department" column="dept_id" class="Department"/> 
 <property name="effectiveStartDate" type="date" column="eff_start_dt"/> 
 <property name="effectiveEndDate" type="date" column="eff_end_dt"/> 
 ... 
 <filter name="effectiveDate" condition=":asOfDate BETWEEN eff_start_dt and eff_end_dt"/> 
</class> 


------解决方案--------------------
在action中调用A、B两个dao中的方法吧!不要在A的dao实现查B的
------解决方案--------------------
我觉得这种应用,你最好写hql语句,采用连接的形式吧。
------解决方案--------------------
同意二楼,A、B虽有关联,但既然都已是DAO,就以DAO的粒度彼此交互,体现了单一职责,也更有利于重用吧(因为粒度细)
------解决方案--------------------
要我说就来简单的 不用迟加载了 直接一次查出来就行,不用dao的方法。
具体就是在xml 配置一对多的时候 在一那边加上 lazy="false" 我看就行了。
用的时候直接get 简单直接...
------解决方案--------------------
1、查询A时就查询A,查询B时就查询B,只是B是多,B中应该有A的引用,因此可以根据A来查询B

2、为了减少查询次数,可以适当的冗余,比如B类中除了有A的引用外,还可以有A的某个常用字段

举例:
用户User和审批意见Approval,很显然有用户是一,审批意见是多,为了在查看审批意见时知道是谁审批的,Approval类中除了有用户的引用外,还应该增加String的 approvalUserName(审批用户姓名),这样在查询审批意见时,不需要查询用户表,从而减少查询次数。