Hibernate数据关联映射之一对一和多对多

来源:互联网 发布:js 数组 map方法 编辑:程序博客网 时间:2024/05/16 17:11

1.一对一关系映射配置
这里以人和身份证号为例,每个人都有唯一的身份证号与之对应
在Person.hbm.xml中配置如下

<class name="Person" table="PERSON">    <!-- 注意一对一映射的主键生成策略 -->    <id name="id">    <!--foreign表示外键-->        <generator class="foreign">            <param name="property">card</param>        </generator>    </id>    <property name="name"/>    <one-to-one name="card" class="com.zhaolong.bean.Card"/></class>

与之对应的Card.hbm.xml的配置如下

<class name="com.zhaolong.bean.Card" table="CARD">    <id name="id">        <!-- 主键有自己指定 -->        <generator class="assigned"/>    </id>    <property name="no"/>    <!-- 主键映射          使用one-to-one 不需要指定column    -->    <one-to-one name="person" class="Person" cascade="all"/>    </class>

编写测试类AddTest.java

Card card=new Card();//在xml中设置自己指定ID,所以需要用set方法设置IDcard.setId(100);card.setNo("111111111111111111");Person person=new Person();person.setName("张三");//设置对应关系card.setPerson(person);person.setCard(card);session.save(card);

person表中ID如下,id为关联card表中id的外键约束
这里写图片描述

card表中数据如下
这里写图片描述

2.多对多关联映射

多对多关联映射的配置中,需要为双方实体类都指定set集合,以Teacher和Student为例,一个老师有多个学生,一个学生也有多个老师
student类定义如下

public class Student implements Serializable{    private Integer id;    private String sname;    private Set<Teacher> teachers=new HashSet<Teacher>();    //set和get方法

teacher类定义如下

public class Teacher implements Serializable{    private Integer id;    private String tname;    private Set<Student> students=new HashSet<Student>();    //set和get方法

多对多配置需要用到第三张表(这张表的作用就是配置两种表的关系), 第三张表当中只包含两个属性,表示两张表的ID,一般情况下,对于多对多的配置,第三张表用相同的表名。

student.hbm.xml配置如下,这里只写出set集合的配置

<set name="teachers" table="STUDENT_TEACHER">    <key column="sid"/>    <many-to-many class="Teacher" column="tid" /></set>

teacher.hbm.xml配置如下

<set name="students" table="STUDENT_TEACHER">    <key column="tid"/>    <many-to-many class="Student" column="sid" /></set>