As we know:
一对一关联有三种情况:(1).关联的实体都共享同样的主键,(2).其中一个实体通过外键关联到另一个实体的主键(注意要模拟一对一关联必须在外键列上添加唯一约束),(3).通过关联表来保存两个实体之间的连接关系(要模拟一对一关联必须在每一个外键上添加唯一约束)。
For Type 1: Here is the example
@Entity
@Table(name="Test_Body")
public class Body {
private Integer id;
private Heart heart;
@Id
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
@OneToOne
@PrimaryKeyJoinColumn
public Heart getHeart() {
return heart;
}
public void setHeart(Heart heart) {
this.heart = heart;
}
}
@Entity
@Table(name="Test_Heart")
public class Heart {
private Integer id;
@Id
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
}
通过@PrimaryKeyJoinColumn批注定义了一对一关联
We get two tables:
Those two tables have just only one column "id", no others else. Is that wrong ?
So question is why we should use this sort of mapping ? In what sort of cases we need use this map ?
首先请你以后请教问题用中文,je里面中国人多,如果你习惯e文提问请去国外的网站,关于1对1使用的场景我给你举个例子:比如文件上传表,里面有一个context字段,大字段类型的,那么我们可以这样设计:将文件内容和文件的其他信息分表,作成1对1主键关联,File表和FileContext表,这样我们在load File的时候,context就不需要管了,可以提高性能,并且file的cache处理也很方便。
HIbernate的思想就是小表多关联,然后用cache撑腰。它是用面象对象的思想考虑你的数据库设计。
PS:javaeye网站的每个topic的context都是另开一个表,然后和topic1对1关联的。