标签(空格分隔): 后端技术学习
前言
在hibernate的使用中,为了减少对数据库的访问,对于存在关联关系映射表使用的时候,我们可以使用懒加载的方式,让hibernate帮我查询单个对象信息的同时,暂缓查询它所关联的另一些对象的信息,当我们真正的使用它所管理的对象的时候后再帮我们查询关联对象。同时懒加载的方式也是hibernate为我们默认选择的方式。虽然懒加载为我们带来了减少数据库查询的好处,但是在使用的过程中如果是对hibernate理解不够容易出现难以寻找的问题。
引入
在课堂上老师引导我们,了解hibernate的查询方式的时候,介绍了使用懒加载的时候session.load()查询会返回的内容并不是我们真正的POJO实体对象,实际上返回的是实体对象的代理类。它跟能够在我调用POJO的getXX()方法的时候使用代理的方式帮我们进行数据库的查询实现懒加载,然后返回我们需要查寻得关联对象。接下来我们细细理解一下半深入懒加载与懒加载代理类。
session.load()讲解
API指出 session.load()
查询总是返回一个并非直接对应数据库行的假对象(代理类)。查出来的假对象它所有的属性也没有被正式的初始化。对它所有的操作,直到事务提交时才进行对它之前所有操作的合并,然后执行数据库语句。
同时在事务提交的时候,如果数据库中原本并没有假对象对应的行则会抛出ObjectNotFoundException
。
如果是没有使用事务load()查询,则在进行session.save(“假对象”),session.saveOrUpdate(“假对象”)的时候则会提示org.hibernate.PersistentO