Hibernate中如何实现懒加载?代码举例讲解

在Hibernate中,懒加载是一种机制,它可以延迟加载对象的关联数据,直到被访问时才触发加载。主要有以下两种方式:

  1. 基于关联映射的懒加载:
  • 在映射文件中使用lazy=”true”开启懒加载。
    例如:
<set name="orders" lazy="true"> 
    <key column="customer_id"/>
    <one-to-many class="Order"/>  
</set>

这种方式延迟加载Customer对象的orders集合数据。

  1. 基于查询的懒加载:
  • 执行查询时,调用setFetchMode()方法开启懒加载。

例如:

String hql = "from Customer"; 
Query query = session.createQuery(hql);
query.setFetchMode("orders", FetchMode.LAZY);   // 懒加载orders数据
List<Customer> list = query.list();

这种方式延迟加载查询结果中Customer对象的orders集合数据。

懒加载数据操作:

  • 首次访问懒加载数据会触发关联查询,加载关联数据。
  • 随后的访问会直接获取已加载的数据,不再查询数据库。

例如:

Customer c1 = session.get(Customer.class, 1);   // 首次访问只加载Customer数据 

// 访问orders集合,触发关联查询,加载orders数据
List<Order> orders = c1.getOrders();  

// 再次访问orders集合,直接获取已加载数据
List<Order> orders2 = c1.getOrders();  

Hibernate的懒加载功能可以有效提高系统性能,避免不必要的关联数据查询。