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>