一对一单向外键关联:一夫一妻,是一对一的关系。建Husband 和Wife类。
public class Husband {
private int id;
private String name;
// 丈夫和妻子,一夫一妻,一对一关联。丈夫里面有Wife的引用,Wife里面没有设定Husband引用,单向引用。
private Wife wife;
@Id
@GeneratedValue
public int getId() {
return id;
}
@OneToOne//一对一
//@JoinColumn与@Column标记一样,是用于注释表中的字段的。
@JoinColumn(name="wife_Id")
public Wife getWife() {
return wife;
}
get、set方法省略.........
}
public class Wife {
private int id;
private String name;
@Id
@GeneratedValue
public int getId() {
return id;
}
get、set方法省略.........
}
@Test
public void save(){
Husband h=new Husband();
h.setName("lilei");
Wife wife=new Wife();
wife.setName("hanmeimei");
h.setWife(wife);
Configuration con= new AnnotationConfiguration();
SessionFactory sf=con.configure().buildSessionFactory();
Session session=sf.getCurrentSession();
session.beginTransaction();
session.save(wife);
session.save(h);
session.getTransaction().commit();
sf.close();
}
控制台打印结果:
Hibernate:
insert
into
Wife
(name)
values
(?)
Hibernate:
insert
into
Husband
(name, wife_Id) //wife_Id) 外键
values
(?, ?)
一对一双向外键关联:只改动Wife即可。
@Entity
public class Wife {
private int id;
private String name;
private Husband husband;
@Id
@GeneratedValue
public int getId() {
return id;
}
//设置mappedby.否则两边都设外键会显得特别冗余,好像还会经常报错。
@OneToOne(mappedBy="wife")
public Husband getHusband() {
return husband;
}
//其他省略...
}
Hibernate:
insert
into
Wife
(name)
values
(?)
Hibernate:
insert
into
Husband
(name, wife_Id)
values
(?, ?)
一对一单向外键关联和一对一双向外键关联,在数据库中没有区别,在后台代码中单向我们的wife找不到husband,而双向中可以找到。好像也没什么区别………….