关于hibernate急迫加载问题(多重外键关联)
2017-11-23 09:54
218 查看
数据库结构如下
strategy中有外键member_id (关联member表) 外键strategy_category(关联category表) 而member表中有外键position_id (关联positons表)
如果前台页面直接查询stategy表中内容 我们hql语句如果这么写
String hql = "From Strategy where id = :id";
控制台会报no session错误 这是因为hibernate默认懒加载 只有我们需要的时候才会将关联的对象加载出来 这里在我们前台需要取关联对象中的属性的时候 session已经关闭了额 才会报这样的错误
那么如何解决呢
这里建议使用left join fetch的方式来加载对象 而不是将注解中默认的懒加载改为急迫加载 效率会很低
语句如下
Strategy strategy = (Strategy) sessionFactoryUtil.getSession()
.createQuery("From Strategy s left join fetch s.strategyCategory left join fetch s.member left join fetch s.member.positions where s.id = :id")
.setInteger("id", id).uniqueResult();
这里需要注意的是 因为关联的member表中又关联了positions表 所以需要一并加载出来 另一个需要注意的是这里的s.id必须这么写 因为这里的每张表的主键名都为id 如果不指明 系统无法辨识
strategy中有外键member_id (关联member表) 外键strategy_category(关联category表) 而member表中有外键position_id (关联positons表)
如果前台页面直接查询stategy表中内容 我们hql语句如果这么写
String hql = "From Strategy where id = :id";
控制台会报no session错误 这是因为hibernate默认懒加载 只有我们需要的时候才会将关联的对象加载出来 这里在我们前台需要取关联对象中的属性的时候 session已经关闭了额 才会报这样的错误
那么如何解决呢
这里建议使用left join fetch的方式来加载对象 而不是将注解中默认的懒加载改为急迫加载 效率会很低
语句如下
Strategy strategy = (Strategy) sessionFactoryUtil.getSession()
.createQuery("From Strategy s left join fetch s.strategyCategory left join fetch s.member left join fetch s.member.positions where s.id = :id")
.setInteger("id", id).uniqueResult();
这里需要注意的是 因为关联的member表中又关联了positions表 所以需要一并加载出来 另一个需要注意的是这里的s.id必须这么写 因为这里的每张表的主键名都为id 如果不指明 系统无法辨识
相关文章推荐
- 浅谈hibernate急迫加载问题(多重外键关联)
- 关于hibernate中双向外键关联one-to-one的property-ref=的问题
- 关于hibernate中双向外键关联one-to-one的property-ref=的问题
- 关于hibernate中双向外键关联one-to-one的property-ref=的问题
- 关于hibernate中双向外键关联one-to-one的property-ref=的问题(转)
- 关于hibernate中映射中有many to one等外键关联时的问题
- 关于Hibernate懒加载问题的最终解决方案
- 关于Hibernate中自关联向前台传送json死循环的问题
- 关于Hibernate延迟加载的问题
- 关于hibernate中的load,get,以及延迟加载问题
- 关于hibernate懒加载异常 以及left fetch on 多级子表关联
- CakePHP的belongsTo关系中关于外键关联字段都不是id字段的问题
- 关于C#中hibernate.cfg.xml动态加载问题
- 关于Hibernate的关联问题
- 关于使用json数据传递的时候hibernate的懒加载问题
- 关于使用JSON对hibernate数据延迟加载的问题
- 关于hibernate纯sql查询返回结果集的问题(hbm.xml中不写多表关联)
- 关于hibernate中取消懒加载问题
- 关于hibernate纯sql查询返回结果集的问题(hbm.xml中不写多表关联)
- 【转】hibernate annotation方式配置实体关联关系,解决关联外键数据不存在时抛出异常的问题