您的位置:首页 > 数据库

Hibernate学习小结之实体对象之间关系

2012-09-22 15:32 369 查看
双向一对一关系:

实体对象之间一对一的关联是通过数据库的外键实现的

外键的使用有以下两种方式:
主键关联:      不需要借助额外字段,直接通过两个表的主键来关联,两表中相关联的记录要使用相同的主键值
唯一外键关联 :某个表的外键字段关联到另一个表的主键字段上,是多对一关联的特例

主键关联:

首先需要在Student对象的配置文件中定义到Address对象的关联:

<one-to-one name="address" class="Address" ></one-to-one>

然后需要在Address对象的配置文件中定义到Student对象的关联

<one-to-one name="student" class="Student" cascade="all"></one-to-one>

并修改Address对象配置文件的id元素

<id name="id" column="id">

<generator class="foreign">

    <param name="property">student</param>

</generator>

</id>

唯一外键关联:

为每一个Address配给一个Student,形成一对一,address表格通过student_id作为外键参考至student:

Student.hbm.xml文件:

<one-to-one name="address" class="Address" property-ref="student" ></one-to-one>

在<one-to-one>中,property-ref告诉Hibernate,查询出
address 并将其参考至
student 。

Address.hbm.xml文件:

<many-to-one name="student" class="Student" column="student_id"
unique="true" fetch="join" ></many-to-one>

unique="true":使多对一变成一对一

在多的一端加入一个外键,参考一的一端,加载多的一端,一的一端自动加载进来

双向一对多关联关系:

Clazz类文件代码如下:

public class Clazz {

private Long id;

private String Name;

private Set<Student> students = new HashSet<Student>();

}

Clazz.hbm.xml文件:

<set name="students" cascade ="save-update" inverse="true" >

<key column="class_id"></key>

<one-to-many class="Student"/>

</set>

cascade="save-update":操作时的级联关系,在执行save和update时进行级联操作

一般讲cascade配置在one-to-many(one的一方),和one-to-one(主对象一方)

inverse="true":使“多”的一方变为主控方,用在双向关联关系中

column="class_id":指定关联方与本类关联的外键字段

class="Student":关联的目标类

<set>的常用属性如下:

name    映射类属性的名字

lazy    是否采用迟延加载

inverse    标识双向关联中被动的一方,为true时表示控制方为对方

<key>元素是<set>的子元素,必不可少,用于描述两者之间的关联关系

<key>元素的常用属性:

column        父元素所持有的类所对应表的外键字段名

on-delete    外键关联是否打开数据库级别的级联删除,noaction|cascade

not-null    表明外键字段是否可以为空,true|false

update    表明外键是否可以被更新,true|false

unique    表明外键是否有唯一性约束,true|false

Student类文件修改如下:

public class Student {

private Long id;

private String name;

private Integer age;

private Clazz clazz;

private Address address;

}

Student.hbm.xml文件:

<many-to-one name="clazz" class="Clazz“ column="class_id">

</many-to-one>

<one-to-one name="address" class="Address" property-ref="student"></one-to-one>

 

多对多关联关系:

多对多在这里表示为:many-to-many
实现多对多需要一个中间表

班级Clazz的配置

    <set name="teachers" table="class_teacher " cascade=“all“ inverse=“true”>

         <key column="class_id"></key>

         <many-to-many class="entity.Teacher" column="teacher_id“  />

    </set>

教师Teacher的配置

    <set name="classes" table="class_teacher ">

        <key column="teacher_id"></key>

        <many-to-many class="entity.Clazz" column="class_id"/>

    </set>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐