使用 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
}
当然,这完全取决于您要实现的目标!
这种方法有什么大的优势吗:
@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
}
当然,这完全取决于您要实现的目标!