不要使用 EAGER 提取类型
当你映射两个实体之间的关系时,Hibernate 可以使用两种类型的提取:EAGER
和 LAZY
。
通常,EAGER
fetch 类型不是一个好主意,因为它告诉 JPA 总是获取数据,即使这些数据不是必需的。
例如,如果你有一个 Person
实体,并且与 Address
的关系如下:
@Entity
public class Person {
@OneToMany(mappedBy="address", fetch=FetchType.EAGER)
private List<Address> addresses;
}
无论何时查询 Person
,此 Person
的 Address
列表也将被返回。
因此,不要将你的实体映射到:
@ManyToMany(mappedBy="address", fetch=FetchType.EAGER)
使用:
@ManyToMany(mappedBy="address", fetch=FetchType.LAZY)
需要注意的另一件事是关系 @OneToOne
和 @ManyToOne
。默认情况下,它们都是 EAGER。因此,如果你担心应用程序的性能,则需要为此类关系设置获取:
@ManyToOne(fetch=FetchType.LAZY)
和:
@OneToOne(fetch=FetchType.LAZY)