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

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方法设置ID
card.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>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值