本帖最后由 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;
}
------最佳解决方案--------------------------------------------------------
我现在把代码改成
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这个设置不要没关系的。
------其他解决方案--------------------------------------------------------