您的位置:首页 > 其它

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

2017-05-19 23:33 447 查看
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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  hibernate