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

hibernate执行多对多关联查询时,关联表数据被删除
本帖最后由 binbb521 于 2012-12-04 11:48:29 编辑
S2SH框架开发的网站,执行两个多对多关系的表查询时,关联两个表的中间表数据被删除,麻烦各位大牛看一下,很急,解决立马结贴,谢谢了!

ZqAdminPermission.hbm.xml

<set name="zqAdminModuleses" table="zq_admin_modules_permission" lazy="false">
            <key>
                <column name="admin_permission_id" length="36" not-null="false" />
            </key>
            <many-to-many column="admin_modules_id" class="com.zqqywssh.vo.ZqAdminModules"></many-to-many>
</set>


ZqAdminModules.hbm.xml

<set name="ZqAdminPermissions" inverse="true" table="zq_admin_modules_permission">
            <key>
                <column name="admin_modules_id" length="36" not-null="false" />
            </key>
            <many-to-many column="admin_permission_id" class="com.zqqywssh.vo.ZqAdminPermission"></many-to-many>
</set>


根据ID查询ZqAdminPermission表中的数据时,应自动将关联的ZqAdminModules数据查出,结果这两个表的关联表的数据自动被删除了,导致查询得到了空集合

public ZqAdminPermission findById(final String id) {
ZqAdminPermission zqAdminPermission = getHibernateTemplate().execute(new HibernateCallback<ZqAdminPermission>() {
public ZqAdminPermission doInHibernate(Session session) throws HibernateException,SQLException {
String hql = "from ZqAdminPermission zap where zap.adminPermissionId=:id";
Query query = session.createQuery(hql);
query.setString("id", id);
List list = query.list();
if(list.size()==0) return null;
return (ZqAdminPermission)list.get(0);
}
});
return zqAdminPermission;
}


------解决方案--------------------
楼主为何要用hibernateCallBack
直接用getHibernateTemplate().find(String query,Object... values)
------解决方案--------------------

------解决方案--------------------
 ZqAdminPermission zqAdminPermission = getHibernateTemplate().execute(new HibernateCallback<ZqAdminPermission>() { 
这个
HibernateTemplate执行execute(new HibernateCallback())方法,从HibernateCallback中得到session,在此session中做多个操作,并希望这些操作位于同一个事务中。
 回调实际就是一种事件触发模式,就象连环地雷一样,一旦触发一个,这个再触发另外一个,你在find这个方法被执行时,希望同时执行其他方法,就需要回调。
楼主不需要执行多个方法就不用加这个回调的东西了吧!




------解决方案--------------------
引用:
新建的类库,还没写删除的方法,目前只是刚要读取一个列表数据,设计的时候是多对多的


楼主,把hibernate的配置