hibernate多对多双向维护问题!!!

chen_2001 2010-08-02 12:54:44
两个多对多对象:用户,地址
数据库表:用户表,用户_地址表(中间表),用户表
我在地址的hbm.xml文件设置inverse=false,用户hbm.xml文件设置inverse=true
添加一个地址没有什么问题,可修改一个地址所包含的用户时,数据库没有反应,这不合乎逻辑,我知道这是inverse=true造成的,可不能把用户hbm.xml的inverse也设置为false吧,请问大家有什么高见,谢谢!
...全文
240 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
yearnqiao 2010-08-03
  • 打赏
  • 举报
回复
用户(user),地址(address) ,中间表userAddress
两个实体类中都有对方的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();就可以了
第四种
只删除用户和关系表时:
就把用户查出来,把地址集合中该用户的关系先给移除掉,然后在把用户删除


你的应该是属于第一种吧!

试试看可以不
HF_SKY000 2010-08-03
  • 打赏
  • 举报
回复
学习了。
不能飞的肥燕 2010-08-03
  • 打赏
  • 举报
回复
不知道这个是不是你要的
http://blog.163.com/kondiweyane@126/blog/static/130426806201001863046307/
btw,问问题的时候把问题说清楚,大家可以帮你解决问题,但是没时间去找你的问题内容:)
chen_2001 2010-08-03
  • 打赏
  • 举报
回复
没人回答吗
IOshopping 2010-08-03
  • 打赏
  • 举报
回复
使用hibernate关联时,最好不要使用双向关联。个人建议
chen_2001 2010-08-02
  • 打赏
  • 举报
回复
user.hbm.xml:
<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", 按现在的方法,插入一个地址会出现主键重复


请高手支招
Jlins 2010-08-02
  • 打赏
  • 举报
回复
应该把代码贴出来....
最好能把双向关系转化成 1:N 来处理 好控制
shore1111 2010-08-02
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 chen_2001 的回复:]

代码网上都有
[/Quote]很强大
chen_2001 2010-08-02
  • 打赏
  • 举报
回复
代码网上都有,好像双向维护都不能实现
bai_feng 2010-08-02
  • 打赏
  • 举报
回复
把你的代码贴上来看看,逻辑没有错误,那就是代码的问题了

67,514

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧