hibernate中list()与iterate()、get()与load()区别

本文详细对比了Hibernate中list()与iterate()的区别,包括它们在缓存使用上的不同;同时介绍了get()与load()两种获取对象的方法及其差异。通过本文,读者可以了解这些方法在实际应用中的优缺点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

总结了一下hibernate中list()与iterate()、get()与load()区别,直奔主题,如下。


  • list():第一次查询时会发出一条SQL语句查出所有对象,并将数据放到缓存中,第二次查询时仍会到数据库中查询,返回的是list对象。(不使用一级缓存、但使用二级缓存)
  • iterate():首先通过一条SQL语句查出所有满足条件记录的主键,根据主键去缓存中查询数据,如果缓存中不存在与之匹配的数据,则会根据主键发出相应的sql语句(1+N问题),返回的是iterator对象。
  • -

  • get():首先会查询一级缓存(session)、没有则查询二级缓存(sessionFactory)、最后查询数据库,如果数据库中没有对应记录则返回null。
  • load():首先查询一级缓存(session),没有就创建代理延迟加载该对象,当需要使用该对象的时候查询二级缓存(sessionFactory)、数据库,如果数据库中不存在该条记录则抛出异常。因为load()方法认为该条记录在数据库中一定存在。

以上情况默认打开hibernate的二级缓存:

  • 配置hibernate.cfg.xml文件
  • 查询之前调用query.setCacheable(true)方法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值