一對一單向外鍵關聯:一夫一妻,是一對一的關係。建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,而雙向中可以找到。好像也沒什麼區別………….