bigcactus 2013-04-23
关系映射
多对一(Employee - Department)
Employee映射文件
<many-to-one name=”depart” column=”depart_id”/>
一对多(Department-Employee)
Department映射文件添加
<set name=”集合对象属性名”>
<key column=”外键名”/>
<one-to-many class=”集合放入的类名”/>
</set>
class Department{ private Integer id; private String name; private Set<Employee> emps }
一对一(Person - IdCard)
1)基于主键的one-to-one(IdCard的映射文件)
<id name=”id”>
<generator class=”foreign”><param name=”property”>person</param></generator>
<id>
<one-to-one name=” person” constrained=”true”/>
[没有constraned true将不会生成外键约束]
Person映射文件: <one-to-one name=“idCard” />
class Person{ private Integer id; private String name; private IdCard idCard } class IdCard{ private Integer id; private java.util.Date useful_life; private Person person }
2)基于外健的one-to-one,可以描述为多对一,加unique=“true”约束,
IdCard的映射文件 中:
<many-to-one name=”person” column=”person_id” unique=”true” not-null=”true”/>
<!-唯一的多对一,其实就便成了一对一了就会在Idcard表生成外键-->
☞ Person映射文件不变化:
多对多(student - course)
在操作和性能方面都不太理想,所以多对多的映射使用较少,实际使
用中最好转换成一对多的对象模型;Hibernate会为我们创建中间
关联表,转换成两个一对多。
<set name=“xxx" table=“xxx">
<key column=“xxx"/>
<many-to-many class=“xxx" column=“xxx"/>
</set>
在操作和性能方面都不太理想,所以多对多的映射使用较少,实际使
用中最好转换成一对多的对象模型;Hibernate会为我们创建中间
关联表,转换成两个一对多。