Hibernate 关联映射one-to-one
一对一关联有两种实现方式:
(1)共享的主键关联,
(2)一对一的外键关联
1、共享的主键关联:让两个对象具有共同的主键值,以表明他们之间的一一对应关系。
Person.java类
public class Person implements java.io.Serializable {
// Fields
private Integer id;
private String name;
private Idcard idcard;
}
Idcard.java类
public class Idcard implements java.io.Serializable {
// Fields
private Integer id;
private String idcardno;
private Person person;
}
Person.hbm.xml
seq_sid
<one-to-one name=”idcard”
class=”com.db.entity.Idcard” cascade=”all” />
Idcard.hbm.xml
person
测试代码:
public static void main(String[] args) {
// TODO Auto-generated method stub
Session session=null;
session=HibernateSessionFactory.getSession();
session.beginTransaction();
//卡
Idcard idcard=new Idcard(“2345678901”);
//人
Person person=new Person(“Lily”);
//相互包含
person.setIdcard(idcard);
idcard.setPerson(person);
//添加人
session.save(person);
session.getTransaction().commit();
}
2、一对一的外键关联:**外键关联,本来是用于多对一的配置,**但是加上唯一的限制之后(采用
首先在表idcard中新添加一列pid用于共享数据
Person.java类
public class Person implements java.io.Serializable {
// Fields
private Integer pid;
private String name;
private Idcard idcard;
.......
}
idcard.java类
public class Idcard implements java.io.Serializable {
// Fields
private Integer iid;
private String idcardno;
private Person person; ……}
Person.hbm.xml
1 <hibernate-mapping>
2 <class name="com.db.entity.Person" table="person">
3 <id name="pid" type="java.lang.Integer">
4 <column name="pid" />
5 <generator class="sequence" />
6 </id>
7 <property name="name" type="java.lang.String">
8 <column name="name" length="30" />
9 </property>
10 <one-to-one name="idcard" class="com.db.entity.Idcard" property-ref="person"/>
11 </class>
12 </hibernate-mapping>
Idcard.hbm.xml
1 <hibernate-mapping>
2 <class name="com.db.entity.Idcard" table="idcard">
3 <id name="iid" type="java.lang.Integer">
4 <generator class="sequence">
5 </generator>
6 </id>
7 <many-to-one name="person" column="pid" class="com.db.entity.Person"
8 cascade="save-update" unique="true"/>
9 <property name="idcardno" type="java.lang.String">
10 <column name="idcardno" length="20" />
11 </property>
12 </class>
13 </hibernate-mapping>
hibernate.cfg.xml文件和测试代码同上。
还没有评论,来说两句吧...