单向 :personàidcard
主键关联:两个实体对象的id保持相同,避免多余的字段被创建
具体映射:
Person.hbm.xml
<hibernate-mapping >
<class name="com.bjsxt.hibernate.Person" table="t_person" ><!--默认存的表和实体类的名字一样 -->
<id name="id"> <!--标识 -->
<generator class="foreign">
<param name="property">idcard</param>
</generator><!—person的主键来源于idcard -->
</id>
<property name="name"></property>
<one-to-one name="idcard" constrained="true"></one-to-one>
<!—指示怎么加载引用对象,默认根据主键,约束为true,person中的id作为外键参照了idcard的id ,默认做了cascade --> //只有一对一主键关联默认cascade
</class>
</hibernate-mapping>
双向:idcard 持有person的引用
需要在idcard映射文件中加入 <one-to-one name="person"></one-to-one>
一对一映射采用外键
唯一外键,单向personàidcard (多对一的特例)
采用many-to-one 指定多的一端的unique为true
Person.hbm.xml
<class name="com.bjsxt.hibernate.Person" table="t_person" >
<id name="id"> <!--标识 -->
<generator class="native"></generator>
</id>
<property name="name"></property>
<many-to-one name="idcard" unique="true"></many-to-one>
指示hibernate如何加载外键
</class>
唯一外键 双向:
IdCard.hbm.xml
指示hibernate如何加载关联对象,默认根据主键加载person,因为外键关联映射,
因为两个实体采用的是person的外键维护关系,所以不能指定主键加载person,而要根据person的外键加载,所以采用如下映射:
<one-to-one name="person" property-ref="idcard"></one-to-one>
浙公网安备 33010602011771号