文章标题

来源:互联网 发布:cntv5 中国网络电视台5 编辑:程序博客网 时间:2024/06/10 14:05

Hibernate—对象关系模型
hibernate中共有4种对象关系

  1. one-to-many
  2. many-to-one
  3. one-to-one
  4. many-to-many

one-to-many:一对多,例如一个department对应多个employer,在hibernate的关系映射文件中如何配置
首先创建domain对象

class Department{    private Integer id;    private String name;    private Set<Employer> employers;}
class Employer{    private Integer id;    private String name;}

再配置对象关系映射文件,在Department.hbm.xml中如下配置

<set name="employers" >    <key column="department_id"></key>    <one-to-many class="com.domain.Employer"></set>

在xml文件中的set中配置one-to-many关系,其中的key值属性中column对应的就是该表的外键,而class属性对应的就是外键对应的那个domain对象

many-to-one:多对一映射关系,上个例子中多个employer对应一个department
domain对象

class Department{    private Integer id;    private String name;}class Employer{    private Integer id;    private String name;    private Department department;}

XML文件
““

name对应的是domain对象的属性,而column则是对应的那个外键one-to-one:分为两种 1. 主键对应domain对象

class Person {
private Integer id;
private String name;
private IdCard idCard;
}
class IdCrad{
private Integer id;
private Date validDate;
private Person person;
}

对象映射文件Person.hbm.xml <id name="id"  type="java.lang.Integer">            <column name="id"></column>            <generator class="identity"></generator>        </id>        <property name="name" type="java.lang.String">            <column name="name" length="64" not-null="true"></column>        </property>        <one-to-one name="idCard" constrained="true" class="com.hjy.domain.IdCard" ></one-to-one>IdCard.hbm.xml<class name="com.hjy.domain.IdCard">        <id name="id"  type="java.lang.Integer">        <column name="id" ></column>            <!--注意这里子对象的生成策略为foreign-->            <generator class="foreign">             <!--注意这里的foreign生成策略需要配对应的property即对应表的属性-->                <param name="property">person</param>            </generator>        </id>        <property name="validDate" type="java.util.Date">            <column name="valiDate"  ></column>        </property>        <one-to-one name="person" class="com.hjy.domain.Person" constrained="true" ></one-to-one>    </class>
向Mysql中添加测试数据Session session=HibernaterUtil.getCurrentSession();        Transaction tx=session.beginTransaction();        Person p=new Person();        IdCard ic=new IdCard();        p.setName("sheeran");        ic.setValidDate(new Date());        //注意这里将person添加到idcard中        ic.setPerson(p);        session.save(p);        session.save(ic);        tx.commit();

在添加数据的时候需要注意:应将主属性添加到子属性中,然后先添加主属性,再添加子属性

2.基于外键的一对一对应
基于外键的一对一对应,这里其实可以看作是one-to-many的一个特殊例子,特殊之处在于,外键不能重复,所以必须要one-to-many中添加 unique,如下

<many-to-one name="person" unique="true"></many-to-one>

many-to-many
多对多的映射在生活中十分常见,但是需要注意的是我们在创建关系的时候应当避免使用many-to-many,而是使用两对one-to-many和many-to-one来代替many-to-many关系。
具体例子有选课:student - course 这便是many-to-many关系,但是我们需要再添加一个选课表来简化这种关系,原来的关系可以转换为 student - stuCourse 和 stuCourse - course ,这样子能大大简化原有关系的复杂程度,更加简洁;

0 0