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

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;
}


------最佳解决方案--------------------
引用:
ZqAdminPermission zqAdminPermission = getHibernateTemplate().execute(new HibernateCallback<ZqAdminPermission>() { 
这个
HibernateTemplate执行execute(new HibernateCallback())方法,从HibernateCa……

我现在把代码改成

public ZqAdminPermission findById(final String id) {
String queryString="from ZqAdminPermission zap left join fetch zap.zqAdminModuleses where zap.adminPermissionId=?";
List list = getHibernateTemplate().find(queryString,id);
if(list.size()==0) return null;
return (ZqAdminPermission)list.get(0);
}

依然是查询数据时就把数据删了。。
------其他解决方案--------------------
引用:
新建的类库,还没写删除的方法,