ng>
Hibernate各种映射关系总结(3)
时间:2010-12-14 javaeye nintenyun
2.4 one-to-one 外键双向mapping
只需要在另一端(IdCard)加入<one-to-one>标签,但是hibernate默 认按照主键加载,所以要告诉hibernate按照指定列来加载
示意:
Xml代码
Id-card
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.nintenyun.hibernate">
<class name="IdCard" table="t_idcard">
<id name="id" column="id">
<generator class="identity"/>
</id>
<property name="cardNo" column="cardno" />
<one-to-one name="person" property-ref="idCard"></one-to- one>
</class>
</hibernate-mapping>
3 一对多映射
1 建立对象模型
Classes[id-int,name-String,student-Set]
Student[id-int,name-String]
2 映射文件
Xml代码
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.nintenyun.hibernate">
<class name="Class" table="t_class">
<id name="id">
<generator class="native"/>
</id>
<property name="name" />
<set name="student" >
<key column="classid" />
<one-to-many class="Student"/>
</set>
</class>
</hibernate-mapping>
缺点:若将Student的classid设置为非空,将无法保存。应为不是student这 一端维护关系,所以student不知道是哪个班级,所以需要发出多余的update语 句来更新关系。
(一对多): 先要session.sava(学生),再sessio.save(班级)
(多对一): 先要session.sava(班级),再sessio.save(学生)
改进 采用 一对多双向关联
Xml代码
<set name="student" inverse="true">
<set name="student" inverse="true">
这样的好处是 存入数据让多的一端进行维护,不需要发出多余的 update.
Hibernate?÷??ó3é?1??μ×ü?á(4)
ê±??:2010-12-14 javaeye nintenyun
4 ?à???àmapping
μ¥?ò£¨2éó?μúèy·?±í£?
1?? ???ó?£Dí
Role[id-int,name-String]
User[id-int,name-String,role-Set]
2ó3é????t
Xml′ú??
<?xml??version="1.0"?>
<!DOCTYPE??hibernate-mapping??PUBLIC
?? "-//Hibernate/Hibernate??Mapping??DTD??3.0//EN"
?? "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping??package="com.nintenyun.hibernate">
???? <class??name="User"??table="t_user">
?????? <id??name="id">
???????? <gen
|