何时应将@JoinColumn或@JoinTable与 JPA 配合使用?

2022-09-01 08:07:10

@JoinColumn将一个外键提供给另一个外键,而将列出 A 和 B 之间所有关系之间的关系。据我所知,他们似乎都在做类似的事情。我什么时候应该使用其中一个?EntityEntity@JoinTableEntityEntity


答案 1

假设您有一个实体,该实体具有关联和实体A@ManyToOneB

@JoinColumn将使用目标实体表(例如)时定义目标表外键(例如)。B_IDB

@Entity
public class A {

    private Long id;

    @ManyToOne
    @JoinColumn(name="B_ID")
    private B b;

}

@JoinTable将使用单独的表来保存 和 之间的关系。AB

@Entity
public class A {

    private Long id;

    @ManyToOne
    @JoinTable(
       name = "A_B", 
       joinColumns = @JoinColumn(name = "B_ID"), 
       inverseJoinColumns = @JoinColumn(name = "A_ID")
    )
    private B b;

}

这次既不包含也不包含任何外键,因为有一个单独的表(例如 )来保存 和 之间的关联。ABA_BAB


答案 2

@JoinTable将两个表的 id 存储到另一个表中,而@JoinColumn将另一个表的 id 存储在新列中。

@JoinTable:这是默认类型。当您需要一个更加规范化的数据库时,请使用此选项。即。以减少冗余。

@JoinColumn :使用它来获得更好的性能,因为它不需要连接额外的表。


推荐