当前位置: 代码迷 >> Java Web开发 >> hibernate施行多对多关联查询时,关联表数据被删除
  详细解决方案

hibernate施行多对多关联查询时,关联表数据被删除

热度:6987   发布时间:2013-02-25 21:08:01.0
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);
}

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

如果存在这个设置:
<property name="hibernate.hbm2ddl.auto">delete</property>
那么直接删除就行。hbm2ddl.auto这个设置不要没关系的。
------其他解决方案--------------------------------------------------------
  相关解决方案