使用 entity+"mapped by" 比使用 id 有什么优势吗?

is there any advantage on using entity+"mapped by" over using the id?

这种方法有什么大的优势吗:

@Entity
public class A {
    @ManyToOne(fetch=FetchType.LAZY)
    @JoinColumn(name = "ID_B")
    private B b;
}

@Entity
public class B {
    @OneToMany(mappedBy = "a", cascade = CascadeType.ALL)
    private List<A> aList;
}

...而不是这个?...

@Entity
public class A {
    @Column(name = "ID_B")
    private Long idB;
}

@Entity
public class B {
    //no reference to A
}

我认为第二个更适合封装(因为我在不同的项目中有 A 和 B 类,第二个不需要引用拳头)。

一个优点是使用适当的 JPA 关系允许您从数据库中获取 A,并在 A 上使用简单的 getter 来获取 B:myA.getB()

而如果你使用 long,当你想要获取一些 B 时,你将需要始终手动再次查询数据库。

请注意,您没有义务声明双方的关系。这样的事情是完全有效的:

@Entity
public class A {
    @ManyToOne(fetch=FetchType.LAZY)
    @JoinColumn(name = "ID_B")
    private B b;
}

@Entity
public class B {
    //no reference to A
}

当然,这完全取决于您要实现的目标!