不要使用 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)