一、一对一单向主键关联(Annotation)
1.1以Husband中加入@PrimaryKeyJoinColumn 即:用主键做连接
package com.bjsxt.hibernate;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;
import javax.persistence.PrimaryKeyJoinColumn;
@Entity
public class Husband {
private int id;
private String name;
private Wife wife;
@Id
@GeneratedValue
public int getId() {
return id;
}
public String getName() {
return name;
}
@OneToOne
@PrimaryKeyJoinColumn
public Wife getWife() {
return wife;
}
public void setId(int id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
public void setWife(Wife wife) {
this.wife = wife;
}
}
1.2hibernate.cfg.xml中加入:
<mapping class="com.bjsxt.hibernate.Husband"/>
<mapping class="com.bjsxt.hibernate.Wife"/>
二、一对一单向主键关联(xml)
1、在StuIdCard.hbm.xml中:
<one-to-one name="student" constrained="true"></one-to-one>
这样就可以建立一对一关系,如果加上属性constrained="true"就 会加上外键约束。
2、它的主键就不能再用native,而要改成foreign
由:
<generator class="native"></generator>
改为:
<generator class="foreign">
<param name="property">student</param>
</generator>
StuIdCard.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.bjsxt.hibernate.StuIdCard">
<id name="id">
<generator class="foreign">
<param name="property">student</param>
</generator>
</id>
<property name="num"/>
<one-to-one name="student" constrained="true"></one-to-one>
</class>
</hibernate-mapping>
三、一对一主键双向关联(Anntation)
在Wife.java里加上:
@PrimaryKeyJoinColumn
和 private Husband husband;
@Entity
public class Wife {
@Id
@PrimaryKeyJoinColumn
private int id;
private String name;
private Husband husband;