延遲載入與預先載入

獲取或載入資料可以主要分為兩種型別:渴望和懶惰。

為了使用 Hibernate,請確保將其最新版本新增到 pom.xml 檔案的 dependencies 部分:

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-core</artifactId>   
    <version>5.2.1.Final</version>
</dependency>

1.急切載入和延遲載入

我們在這裡要討論的第一件事是延遲載入和急切載入:

Eager Loading 是一種設計模式,可以在現場進行資料初始化。這意味著在獲取父級時完全獲取集合(立即獲取)

延遲載入是一種設計模式,用於將物件的初始化推遲到需要它的點。這可以有效地提高應用程式的效能。

2.使用不同型別的載入

可以使用以下 XML 引數啟用延遲載入:

lazy="true"

讓我們深入研究這個例子。首先我們有一個 User 類:

public class User implements Serializable {
   
    private Long userId;
    private String userName;
    private String firstName;
    private String lastName;
    private Set<OrderDetail> orderDetail = new HashSet<>();

    //setters and getters
    //equals and hashcode
    }

看看我們擁有的 orderDetail 集。現在讓我們來看看 OrderDetail 類

public class OrderDetail implements Serializable {

    private Long orderId;
    private Date orderDate;
    private String orderDesc;
    private User user;

    //setters and getters
    //equals and hashcode
}

UserLazy.hbm.xml 中設定延遲載入所涉及的重要部分:

<set name="orderDetail" table="USER_ORDER" inverse="true" lazy="true" fetch="select">
    <key>
        <column name="USER_ID" not-null="true" />
    </key>
   <one-to-many class="com.baeldung.hibernate.fetching.model.OrderDetail" />
</set>

這是啟用延遲載入的方式。要禁用延遲載入,我們可以簡單地使用:lazy = "false",這反過來將啟用預先載入。以下是在另一個檔案 User.hbm.xml 中設定 eager 載入的示例:

<set name="orderDetail" table="USER_ORDER" inverse="true" lazy="false" fetch="select">
    <key>
        <column name="USER_ID" not-null="true" />
    </key>
   <one-to-many class="com.baeldung.hibernate.fetching.model.OrderDetail" />
</set>