两个多对多对象:用户,地址
数据库表:用户表,用户_地址表(中间表),用户表
我在地址的hbm.xml文件设置inverse=false,用户hbm.xml文件设置inverse=true
添加一个地址没有什么问题,可修改一个地址所包含的用户时,数据库没有反应,这不合乎逻辑,我知道这是inverse=true造成的,可不能把用户hbm.xml的inverse也设置为false吧,请问大家有什么高见,谢谢!
数据库表:用户表,用户_地址表(中间表),用户表
我在地址的hbm.xml文件设置inverse=false,用户hbm.xml文件设置inverse=true
添加一个地址没有什么问题,可修改一个地址所包含的用户时,数据库没有反应,这不合乎逻辑,我知道这是inverse=true造成的,可不能把用户hbm.xml的inverse也设置为false吧,请问大家有什么高见,谢谢!
解决方案 »
- 关于javamail的一个问题
- 往sqlserv2000中插入数据是出现空指针怎么回事?
- 梅花雪1.0怎么可以改动树显示的颜色
- tomcat部署struts问题
- jsp中forword和sendRedirect
- java web工程中读取properties文件,路径一直不知道怎么写
- xml存储树型结构方案,请高手指教!
- 这个问题怎么解决?
- 请教hibernate在oracle ias上的配置
- Canvas多次setBounds占用内存不释放的问题
- request.getCookies()方法得不到cookie,只得到一个内存cookie
- struts2里面的filter 过滤器到底是干什么用的
<set class = "user_addr" inverse="true" cascade="save-update">
...
address.hbm.xml
<set class = "user_addr" inverse="false">
...再加2个PO类
User.java 和 Address.java
数据库外键已经加入1.对某一用户,如果增加地址时,user_addr表中会加入一条记录;
addr.getUsers().add(user);
addrDao.update(addr);2.修改某一用户地址,如删除一个用户地址,user_addr并没有删除一条记录
user.getAddrs().remove(addr);
userDao.update(user);
我认为这是inverse造成的,可是1成功,2失败,我想1、2都能成功,怎么办?如果都改为inverse="false", 按现在的方法,插入一个地址会出现主键重复
请高手支招
http://blog.163.com/kondiweyane@126/blog/static/130426806201001863046307/
btw,问问题的时候把问题说清楚,大家可以帮你解决问题,但是没时间去找你的问题内容:)
两个实体类中都有对方的set集合作为属性
配置也前两种关系差不多:
user实体的配置是:
<set name="adds" table="userAddress" inverse="true">
</set>其他的都是一样的
address配置:
<set name="users" table="userAddress" cascade="all">
</set>
中间表不用配置,set中的table指的就是中间表,把主动权交给了address,并且设有级联
前提是:主动权交给了address,
第一种
当我们想把地址删除掉时,关系表删掉,但用户不删除
做法是,在delete(address)之前,先把地址的用户集合中的数据先clear();
Set<user> ss = adds.getUsers();
ss.clear();
session.flush();
第二种
当我们想把地址删除掉时,关系表删掉,用户也要删除
就直接delete(address)
第三种
如果只要删除关系表 就:
把地址的用户集合中的数据clear();就可以了
第四种
只删除用户和关系表时:
就把用户查出来,把地址集合中该用户的关系先给移除掉,然后在把用户删除
你的应该是属于第一种吧!试试看可以不