在Hibernate中,懒加载是一种机制,它可以延迟加载对象的关联数据,直到被访问时才触发加载。主要有以下两种方式:
- 基于关联映射的懒加载:
- 在映射文件中使用lazy=”true”开启懒加载。
例如:
<set name="orders" lazy="true">
<key column="customer_id"/>
<one-to-many class="Order"/>
</set>
这种方式延迟加载Customer对象的orders集合数据。
- 基于查询的懒加载:
- 执行查询时,调用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的懒加载功能可以有效提高系统性能,避免不必要的关联数据查询。