读书人

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

发布时间: 2012-11-03 10:57:42 作者: rapoo

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

双向一对一关系:
实体对象之间一对一的关联是通过数据库的外键实现的
外键的使用有以下两种方式:
主键关联:??? ?不需要借助额外字段,直接通过两个表的主键来关联,两表中相关联的记录要使用相同的主键值
唯一外键关联:某个表的外键字段关联到另一个表的主键字段上,是多对一关联的特例

主键关联:
首先需要在Student对象的配置文件中定义到Address对象的关联:
<one-to-one name="address" ></one-to-one>
然后需要在Address对象的配置文件中定义到Student对象的关联
<one-to-one name="student" cascade="all"></one-to-one>
并修改Address对象配置文件的id元素
<id name="id" column="id">
<generator property-ref="student"></one-to-one>

在<one-to-one>中,property-ref告诉Hibernate,查询出address并将其参考至student。
Address.hbm.xml文件:
<many-to-one name="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 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 column="teacher_id“? />
??? </set>

教师Teacher的配置
??? <set name="classes" table="class_teacher">
??? ??? <key column="teacher_id"></key>
??? ??? <many-to-many column="class_id"/>
??? </set>

读书人网 >软件架构设计

热点推荐