一对一双向外键关联
1、主控方的配置同一对一单向一样不用更改
2、在被控方设置关联对象的属性引用上加上@OneToOne主键
3、双向关联,必须要有mappedBy属性(mappedBy的意思是由对方主导关联关系)
注意:自动生成表时会在两张表上都加入外键关联关系,可以通过没置mappedBy来解决
1、创建实体类Person并添加idCard引用
package cn.yinghuo.model;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;
import org.hibernate.annotations.GenericGenerator;
/**
* 双向外键关联
* 主控方
*/
@Entity
public class Person {
public String pid;
public String pname;
public IdCard idCard;
@Id //主键
@GeneratedValue(generator="uuid") //指定一个生成器为uuid
@GenericGenerator(name = "uuid", strategy ="uuid") //构建一个生成器,生成策略strategy为手工赋值
public String getPid() {
return pid;
}
public void setPid(String pid) {
this.pid = pid;
}
public String getPname() {
return pname;
}
public void setPname(String pname) {
this.pname = pname;
}
@OneToOne //全级联的级联关系
@JoinColumn(name="cid") //被控类对应的主键为cid
public IdCard getIdCard() {
return idCard;
}
public void setIdCard(IdCard idCard) {
this.idCard = idCard;
}
}
2、创建实体类idCard并添加Person引用
package cn.yinghuo.model;
/**
* 双向外键关联
* 被控方
*/
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToOne;
import org.hibernate.annotations.GenericGenerator;
@Entity
public class IdCard {
public String cid;
public String cname;
public Person person;
@Id // 主键
@GeneratedValue(generator="uuid") //指定一个生成器为uuid
@GenericGenerator(name = "uuid", strategy ="uuid") //构建一个生成器,生成策略strategy为手工赋值
public String getCid() {
return cid;
}
public void setCid(String cid) {
this.cid = cid;
}
public String getCname() {
return cname;
}
public void setCname(String cname) {
this.cname = cname;
}
@OneToOne(mappedBy="idCard")
public Person getPerson() {
return person;
}
public void setPerson(Person person) {
this.person = person;
}
}
3、创建测试类
package cn.yinghuo.action;
/**
* 测试类
*/
import org.hibernate.cfg.Configuration;
import org.hibernate.tool.hbm2ddl.SchemaExport;
public class Main {
public static void main(String[] args) {
schemaExport();
}
// schemaExport()生成数据库表
// 第一个true是在控制台打印出DDL,如果是false没什么影响只是不再打印出DDL(数据库定义语言)
// 第二个true是创建表,反之false则不创建
public static void schemaExport() {
new SchemaExport(new Configuration().configure()).create(true, true);
}
}
4、在XML中引入映射文件
<mapping class="cn.yinghuo.model.Person" />
<mapping class="cn.yinghuo.model.IdCard" />