`
mrzhangtufu
  • 浏览: 60581 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

多对多连接表双向关联

阅读更多

多对多连接表双向关联时:只能有一端的<set>放入属性inverse="true",之后Session.save()时,首先保存哪个端POJO均可,当另一端的POJO必须调用saveOrUpdate()进行相应的链接和连接表的更新。

示例:

一个Person可以有多个Address,一个Address可以有多个Person。利用连接表进行双向链接:

数据库表:
CREATE TABLE `address_nn_sx` (
 `addressid` int(11) NOT NULL auto_increment,
 `addressdetail` varchar(255) default NULL,
 PRIMARY KEY (`addressid`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk;
 
CREATE TABLE `person_nn_sx` (
 `personid` int(11) NOT NULL auto_increment,
 `name` varchar(255) default NULL,
 `age` int(11) default NULL,
 PRIMARY KEY (`personid`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk;
 
CREATE TABLE `join_nn_sx` (
 `addressid` int(11) NOT NULL,
  `personid` int(11) NOT NULL,
  PRIMARY KEY (`personid`,`addressid`),
  KEY `FK6EBBC5EF6C600921` (`personid`),
  KEY `FK6EBBC5EF2A92FF3D` (`addressid`),
  CONSTRAINT `FK6EBBC5EF2A92FF3D` FOREIGN KEY (`addressid`) REFERENCES `address_nn_sx` (`addressid`),
  CONSTRAINT `FK6EBBC5EF6C600921` FOREIGN KEY (`personid`) REFERENCES `person_nn_sx` (`personid`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk;
 


POJO(省去getter,setter):

 
public class Personnn_sx {
 
 private int personid;
 
 private String name;
 
 private int age;
 
 private Set addresses=new HashSet();
 
 
public class Addressnn_sx {
 
 private int addressid;
 
 private String addressdetail;
 
 private Set persons = new HashSet();
 

hbm.xml:

<hibernate-mapping>
    <class name="com.Addressnnsx" table="address_nn_sx">
        <id column="addressid" name="addressid" type="int">
            <generator class="identity"/>
        </id>
        <property name="addressdetail" column="addressdetail" type="string"/>
        <set name="persons" table="join_nn_sx">
            <key column="addressid"/>
            <many-to-many column="personid" class="com.Personnnsx"/>
        </set>
    </class>
</hibernate-mapping>

<hibernate-mapping>
    <class name="com.Personnnsx" table="person_nn_sx">
        <id column="personid" name="personid" type="int">
            <generator class="identity"/>
        </id>
        <property name="name" column="name" type="string"/>
        <property name="age" column="age" type="int"/>

        <set table="join_nn_sx"
        name="addresses" cascade="all" inverse="true">
            <key column="personid"/>
            <many-to-many class="com.Addressnnsx"
             column="addressid"/>
        </set>
    </class>
</hibernate-mapping>

Test Main:

public class Test_nn_sx {
    public static void main(String args[]){
        Addressnnsx add1=new Addressnnsx();
         Addressnnsx add2=new Addressnnsx();
         Personnnsx p1=new Personnnsx();
         Personnnsx p2=new Personnnsx();
         add1.setAddressdetail("郑州市经三路");
         add2.setAddressdetail("合肥市宿州路");
         p1.setName("wang");
         p1.setAge(30);
         p2.setName("zhang");
         p2.setAge(22);

         add1.getPersons().add(p1);
         add2.getPersons().add(p1);
         add2.getPersons().add(p2);
         p1.getAddresses().add(add1);
         p1.getAddresses().add(add2);
         p2.getAddresses().add(add2);
        
         Session session= HibernateUtil.getSession();
         Transaction tx=session.beginTransaction();
         session.save(add1);
         session.save(add2);
         session.saveOrUpdate(p1);
         session.saveOrUpdate(p2);

         //session.save(p1);
         //session.save(p2);
         //session.saveOrUpdate(add1); //上面的save()已经对相应的address进行插入操作,故这里必须检查相应的表是否需要更新再保存
         //session.saveOrUpdate(add2);
         tx.commit();
         HibernateUtil.closeSession();
    }
}

分享到:
评论

相关推荐

    Hibernate ORM - 多对多双向连接表关联关系

    NULL 博文链接:https://dreamzhong.iteye.com/blog/1201615

    Hibernate关联映射

    Hibernate 一对一外键单向关联 Hibernate 一对一主键单向关联 Hibernate 一对一连接表单向...Hibernate 一对一连接表双向关联 Hibernate 一对多外键双向关联 Hibernate 一对多连接表双向关联 Hibernate 多对多双向关联

    Hibernate关联关系映射目录

    Hibernate关联关系映射 单向关联 │ ├─ 一对一外键单向关联 │ ├─ 一对一主键单向关联 ...├─ 一对一连接表双向关联 ├─ 一对多外键双向关联 ├─ 一对多连接表双向关联 └─ 多对多双向关联

    Hibernate ORM - 一对多双向连接表关联关系

    NULL 博文链接:https://dreamzhong.iteye.com/blog/1201437

    Hibernate_Annotation关联映射

    在EJB3规范中多对一这端几乎总是双向关联中的主体(owner)端,而一对多这端关联批注为@OneToMany(mappedBy...) @Entity Public class Troop{ @OneToMany(mappedBy=”troop”) Public Set&lt;Soldier&gt; getSoldiers(){ .....

    hibernate学习笔记

    多对一, 一对一, 一对多, 多对多 7 hibernate多对一关联映射(Hibernate_Many2One) 7 hibernate一对一主键关联映射(单向关联Person----&gt;IdCard) 8 hibernate一对一主键关联映射(双向关联Person&lt;----&gt;IdCard) 9...

    NHibernate中文文档

    使用表连接的双向关联 16 第7章示例: Parent/Child 16 关于collections 17 双向的一对多关系(Bidirectional one-to-many) 17 级联生命周期(Cascading lifecycle) 18 级联更新(Using cascading update()) 19 结论...

    Hibernate3的帮助文档

    8.5. 使用连接表的双向关联(Bidirectional associations with join tables) 8.5.1. 一对多(one to many) /多对一( many to one) 8.5.2. 一对一(one to one) 8.5.3. 多对多(many to many) 9. 组件...

    EJB葵花宝典(题集)

    5.8.3多对多双向关联 68 1.1.1.7 表1 68 1.1.1.8 表2 70 1.1.1.9 插入数据 72 1.1.1.10 查找数据 73 1.1.1.11 删除数据 74 1.1.1.12 增删关联表中的数据 75 5.9Persistence继承策略 76 5.9.1每个子类一张表 76 5.9.2...

    Hibernate注释大全收藏

    这种策略支持双向的一对多关联,但不支持 IDENTIFY 生成器策略,因为ID必须在多个表间共享。一旦使用就不能使用AUTO和IDENTIFY生成器。 每个类层次结构一张表 @Entity @Inheritance(strategy=InheritanceType....

    Hibernate_3.2.0_符合Java习惯的关系数据库持久化

    7.5. 使用连接表的双向关联(Bidirectional associations with join tables) 7.5.1. 一对多(one to many) /多对一( many to one) 7.5.2. 一对一(one to one) 7.5.3. 多对多(many to many) 7.6. 更复杂...

    Hibernate+中文文档

    7.5. 使用连接表的双向关联(Bidirectional associations with join tables) 7.5.1. 一对多(one to many) /多对一( many to one) 7.5.2. 一对一(one to one) 7.5.3. 多对多(many to many) 7.6. 更复杂...

    Hibernate中文详细学习文档

    7.5. 使用连接表的双向关联(Bidirectional associations with join tables) 7.5.1. 一对多(one to many) /多对一( many to one) 7.5.2. 一对一(one to one) 7.5.3. 多对多(many to many) 7.6. 更复杂...

    Hibernate 中文 html 帮助文档

    7.5. 使用连接表的双向关联(Bidirectional associations with join tables) 7.5.1. 一对多(one to many) /多对一( many to one) 7.5.2. 一对一(one to one) 7.5.3. 多对多(many to many) 7.6. 更复杂的...

    HibernateAPI中文版.chm

    7.5. 使用连接表的双向关联(Bidirectional associations with join tables) 7.5.1. 一对多(one to many) /多对一( many to one) 7.5.2. 一对一(one to one) 7.5.3. 多对多(many to many) 7.6. 更复杂...

    hibernate3.2中文文档(chm格式)

    7.5. 使用连接表的双向关联(Bidirectional associations with join tables) 7.5.1. 一对多(one to many) /多对一( many to one) 7.5.2. 一对一(one to one) 7.5.3. 多对多(many to many) 7.6. 更复杂...

    hibernate 框架详解

    使用连接表的双向关联(Bidirectional associations with join tables) 8.5.1. 一对多(one to many) /多对一( many to one) 8.5.2. 一对一(one to one) 8.5.3. 多对多(many to many) 9. 组件...

    hibernate 体系结构与配置 参考文档(html)

    使用连接表的双向关联(Bidirectional associations with join tables) 7.5.1. 一对多(one to many) /多对一( many to one) 7.5.2. 一对一(one to one) 7.5.3. 多对多(many to many) 7.6. 更复杂的...

    Hibernate参考文档

    7.5. 使用连接表的双向关联(Bidirectional associations with join tables) 7.5.1. 一对多(one to many) /多对一( many to one) 7.5.2. 一对一(one to one) 7.5.3. 多对多(many to many) 7.6. 更复杂的...

Global site tag (gtag.js) - Google Analytics