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 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="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相反。
?