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相反。