主键关联和外键关联类似,只需要将对应的注解稍作修改即可,主键关联用的很少。
1、写Husband.java类,并在其中添加对Wife的引用,同时注解。
package com.hibernate._0800_one2one_uni_pk; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.OneToOne; import javax.persistence.PrimaryKeyJoinColumn; @Entity public class Husband { private Integer id; private String name; private Wife wife; //去参考wife的id,此时wife必须先id @Id @GeneratedValue public Integer getId() { return id; } public String getName() { return name; } @OneToOne //设置关联关系 @PrimaryKeyJoinColumn(name="wifeId") //@PrimaryKeyJoinColumn用主键来做连接,指定数据库中的名字,默认为wife_id public Wife getWife() { return wife; } public void setId(Integer id) { this.id = id; } public void setName(String name) { this.name = name; } public void setWife(Wife wife) { this.wife = wife; } }
@PrimaryKeyJoinColumn 设置用主键来做连接
2、写Wife.java类
package com.hibernate._0800_one2one_uni_pk; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.OneToOne; @Entity public class Wife { private Integer id; private String name; private Husband husband; /** mappedBy="wife"中的这个wife是Husband中的wife属性,表示Husband起主导作用 如果不加,在数据库中Wife表中会生成husband_id这个冗余字段*/ @OneToOne(mappedBy="wife") public Husband getHusband() { return husband; } @Id @PrimaryKeyJoinColumn(name="husbandId") //加上这个注解就变成一对一双向主键关联 public Integer getId() { return id; } public String getName() { return name; } public void setHusband(Husband husband) { this.husband = husband; } public void setId(Integer id) { this.id = id; } public void setName(String name) { this.name = name; } }
3、XML中的配置。
单向主键关联时,
Husband.hbm.xml文件中配置如下:
<id name="id"> <generator class="foreign"> <param name="property">wife</param> <!-- 这个值wife --> </generator> <!--不写貌似也没关系,但最好还是class="" 值最好设为foreign--> </id> <property name="name" /> <one-to-one name="wife" constrained="true"/> <!-- 加上constrained="true"来设定外键约束 -->Wife.hbm.xml 中的配置如下;
<id name="id"> <generator class="native"></generator> </id> <property name="name" />
双向主键关联时,
Husband.hbm.xml文件中配置如下:
<id name="id"> <generator class="native"></generator> </id> <property name="name" /> <one-to-one name="wife" property-ref="husband"/>Wife.hbm.xml 中的配置如下;
<id name="id"> <generator class="native"></generator> </id> <property name="name" /> <one-to-one name="husband" constrained="true"/>