Hibernate 半深入懒加载与懒加载代理类

本文探讨了Hibernate中的懒加载技术,解释了session.load()和session.get()的区别。session.load()返回的是实体对象的代理类,适用于懒加载,而session.get()直接返回数据库中的真实对象,不支持懒加载。在使用懒加载时,代理类会在需要时执行数据库查询,如果在session关闭后尝试访问代理类,会导致异常。
摘要由CSDN通过智能技术生成

标签(空格分隔): 后端技术学习


前言

在hibernate的使用中,为了减少对数据库的访问,对于存在关联关系映射表使用的时候,我们可以使用懒加载的方式,让hibernate帮我查询单个对象信息的同时,暂缓查询它所关联的另一些对象的信息,当我们真正的使用它所管理的对象的时候后再帮我们查询关联对象。同时懒加载的方式也是hibernate为我们默认选择的方式。虽然懒加载为我们带来了减少数据库查询的好处,但是在使用的过程中如果是对hibernate理解不够容易出现难以寻找的问题。

引入

在课堂上老师引导我们,了解hibernate的查询方式的时候,介绍了使用懒加载的时候session.load()查询会返回的内容并不是我们真正的POJO实体对象,实际上返回的是实体对象的代理类。它跟能够在我调用POJO的getXX()方法的时候使用代理的方式帮我们进行数据库的查询实现懒加载,然后返回我们需要查寻得关联对象。接下来我们细细理解一下半深入懒加载与懒加载代理类。


session.load()讲解

API指出 session.load()查询总是返回一个并非直接对应数据库行的假对象(代理类)。查出来的假对象它所有的属性也没有被正式的初始化。对它所有的操作,直到事务提交时才进行对它之前所有操作的合并,然后执行数据库语句。
同时在事务提交的时候,如果数据库中原本并没有假对象对应的行则会抛出ObjectNotFoundException
如果是没有使用事务load()查询,则在进行session.save(“假对象”),session.saveOrUpdate(“假对象”)的时候则会提示org.hibernate.PersistentO

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值