两个多对多对象:用户,地址
数据库表:用户表,用户_地址表(中间表),用户表
我在地址的hbm.xml文件设置inverse=false,用户hbm.xml文件设置inverse=true
添加一个地址没有什么问题,可修改一个地址所包含的用户时,数据库没有反应,这不合乎逻辑,我知道这是inverse=true造成的,可不能把用户hbm.xml的inverse也设置为false吧,请问大家有什么高见,谢谢!

解决方案 »

  1.   

    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", 按现在的方法,插入一个地址会出现主键重复
    请高手支招
      

  2.   

    不知道这个是不是你要的
    http://blog.163.com/kondiweyane@126/blog/static/130426806201001863046307/
    btw,问问题的时候把问题说清楚,大家可以帮你解决问题,但是没时间去找你的问题内容:)
      

  3.   

    用户(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();就可以了
    第四种
    只删除用户和关系表时:
    就把用户查出来,把地址集合中该用户的关系先给移除掉,然后在把用户删除
    你的应该是属于第一种吧!试试看可以不
      

  4.   

    使用hibernate关联时,最好不要使用双向关联。个人建议