Hibernate 一对一联系关系
Hibernate 一对一关联
Student(学生)和Document(学籍)存在一对一关系
Student.java
/** * */ package com.hb.jo; /** * @author dudong0726 * * @date 2011-11-8 下午04:36:25 * */ public class Student { private long id; private String name; private String email; private Document doc; public long getId() { return id; } public void setId(long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public Document getDoc() { return doc; } public void setDoc(Document doc) { this.doc = doc; } }
Document.java
/** * */ package com.hb.jo; /** * @author dudong0726 * * @date 2011-11-8 下午04:37:19 * */ public class Document { private long id; private String number; private Student stu; public long getId() { return id; } public void setId(long id) { this.id = id; } public String getNumber() { return number; } public void setNumber(String number) { this.number = number; } public Student getStu() { return stu; } public void setStu(Student stu) { this.stu = stu; } }
student.hbm.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> <class name="com.hb.jo.Student" table="student"> <id name="id" column="stu_id"> <generator class="foreign"> <param name="property">doc</param> </generator> </id> <property name="name"></property> <property name="email"></property> <one-to-one name="doc" class="com.hb.jo.Document" constrained="true"></one-to-one> </class> </hibernate-mapping>
document.hbm.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> <class name="com.hb.jo.Document" table="document"> <id name="id" column="doc_id"> <generator class="native"></generator> </id> <property name="number"></property> <one-to-one name="stu" class="com.hb.jo.Student"></one-to-one> </class> </hibernate-mapping>
需要注意的地方:
1、为保证两个关联的表中id的一致,需要在其中一个表中的id作为外键,其生成策略使用和他关联表的id;
2、需要在有外键的表中指定 constrained = 'true',来明确指定通过外键对主键进行关联;此字段影响save和delete的先后顺序,因为其id生成需要与其关联表的主键,所以每次save先save关联的表,在查询关联表的id作为id;在删除时和save相反。