延迟加载与预先加载

获取或加载数据可以主要分为两种类型:渴望和懒惰。

为了使用 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>