当前位置: 代码迷 >> J2EE >> 关于Hibernate的懒加载,小弟我只想单纯的获取外键值,而不想全部加载,如何破
  详细解决方案

关于Hibernate的懒加载,小弟我只想单纯的获取外键值,而不想全部加载,如何破

热度:173   发布时间:2016-04-19 21:57:43.0
关于Hibernate的懒加载,我只想单纯的获取外键值,而不想全部加载,怎么破?
两个表关联,如:用户表(User) ,栏目模块表(Section)。
用户表(User)中有个外键字段关联到模块表(Section)。
在用户实体中,Section的外键为:

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "FK_TS_ID", nullable = false)
private Section section;

查询时,使用Hibernate的 get(id) 取的了 User 的实体,但我此时想知道用户是属于哪个模块的,只要模块ID就够了(SectionID),而不想加载整个模块,此时怎么破?
我用Debug追踪的Section这个实体,是个代理类,里面有Section的ID值,但是却是放在handler里面,我想要这个值,怎么破?


------解决方案--------------------
直接写JDBC查询或者用createSqlQuery()方法!
------解决方案--------------------
User表中加字段,存储栏目名称
------解决方案--------------------
使用hibernate的属性延迟加载的话,获取属性值,额外需要添加OpenSessionInViewFilter
不然就会包session关闭异常。考虑下这个过滤器
------解决方案--------------------
引用:
引用:使用hibernate的属性延迟加载的话,获取属性值,额外需要添加OpenSessionInViewFilter
不然就会包session关闭异常。考虑下这个过滤器
用过了,会有莫名其妙的事情,不知道是session问题,更新操作的时候,不能更新。


hibernate本来效率就是弱点,你这样高效的想法,和hibernate不匹配,不协调。
  相关解决方案