不要使用 EAGER 提取类型

当你映射两个实体之间的关系时,Hibernate 可以使用两种类型的提取:EAGERLAZY

通常,EAGER fetch 类型不是一个好主意,因为它告诉 JPA 总是获取数据,即使这些数据不是必需的。

例如,如果你有一个 Person 实体,并且与 Address 的关系如下:

@Entity
public class Person {

  @OneToMany(mappedBy="address", fetch=FetchType.EAGER)
  private List<Address> addresses;

}

无论何时查询 Person,此 PersonAddress 列表也将被返回。

因此,不要将你的实体映射到:

@ManyToMany(mappedBy="address", fetch=FetchType.EAGER)

使用:

@ManyToMany(mappedBy="address", fetch=FetchType.LAZY)

需要注意的另一件事是关系 @OneToOne@ManyToOne默认情况下,它们都是 EAGER。因此,如果你担心应用程序的性能,则需要为此类关系设置获取:

@ManyToOne(fetch=FetchType.LAZY)

和:

@OneToOne(fetch=FetchType.LAZY)