網頁

2018/6/24

JPA @OneToMany參數FetchType.LAZY和FetchType.EAGER的差別

JPA @OneToManyfetch屬性可選擇FetchType.LAZYFetchType.EAGER,差別如下。

  • FetchType.LAZY只在用到時才載入關聯的物件。
  • FetchType.EAGER在查詢時立刻載入關聯的物件。

例如Department下有多個Employee如下

public class Department {

    private String id;
    private String name;
    private String address;
    
    @OneToMany(fetch=FetchType.LAZY)
    private List<Employee> employeeList;

 // setters and getters
}

如果是FetchType.LAZY,則查詢時並不立刻將employeeList中的物件載入,而是在呼叫如employeeList.get()等用來存取Employee物件的方法時才會載入(必須EntityManager未中斷的情況下)。

如果是FetchType.EAGER,則是開始查詢時就會將employeeList中的物件立刻載入。


沒有留言:

張貼留言