时间:2021-05-19
数据库结构如下
strategy中有外键member_id(关联member表)外键strategy_category(关联category表)而member表中有外键position_id(关联positons表)
如果前台页面直接查询stategy表中内容我们hql语句如果这么写
Stringhql="FromStrategywhereid=:id";
控制台会报nosession错误这是因为hibernate默认懒加载只有我们需要的时候才会将关联的对象加载出来这里在我们前台需要取关联对象中的属性的时候session已经关闭了额才会报这样的错误
那么如何解决呢
这里建议使用leftjoinfetch的方式来加载对象而不是将注解中默认的懒加载改为急迫加载效率会很低
语句如下
Strategystrategy=(Strategy)sessionFactoryUtil.getSession().createQuery("FromStrategysleftjoinfetchs.strategyCategoryleftjoinfetchs.memberleftjoinfetchs.member.positionswheres.id=:id").setInteger("id",id).uniqueResult();这里需要注意的是因为关联的member表中又关联了positions表所以需要一并加载出来另一个需要注意的是这里的s.id必须这么写因为这里的每张表的主键名都为id如果不指明系统无法辨识
总结
以上就是本文关于浅谈hibernate急迫加载问题(多重外键关联)的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
浅谈hibernate中懒加载禁用操作懒加载的概念:懒加载就是hibernate中的延迟加载,在hibernate中的一对多,多对多关系中通过对象导航来查询对象
在Session的缓存中存放的是相互关联的对象图。默认情况下,当Hibernate从数据库中加载Customer对象时,会同时加载所有关联的Order对象。以C
本文总结了我在学习hibernate的过程中,解决hibernate懒加载问题的四种方式。所谓懒加载(lazy)就是延时加载,延迟加载。什么时候用懒加载呢,我只
建立外键的前提:本表的列必须与外键类型相同(外键必须是外表主键)。外键作用:使两张表形成关联,外键只能引用外表中的列的值!指定主键关键字:foreignkey(
对这种懒加载问题,最后的做法是利用Spring提供的一个针对Hibernate的一个支持类,其主要意思是在发起一个页面请求时打开Hibernate的Sessio