我正在编写一个使用Hibernate来查询数据库(SQL Server)的应用程序。现在,我正在查询所有项目的链接表。
查询看起来像:
"FROM UserRole ur join ur.platformUser join ur.role join ur.company"
我需要列表中的所有UserRoles对象,但是当我查询上述查询时,我得到了其中包含UserRole,Role,Company和PlatformUser对象的大量对象。
我只需要UserRole对象以及UserRole对象中的其他对象。如何在Hiernate中解决此问题,以便将结果强制转换为ex。Arraylist<UserRole>
?
我尝试了以下语法:
Query query = session.createSQLQuery("select * FROM UserRole ur join PlatformUser pu ON pu.userId = ur.userId join [Role] r ON r.roleId = ur.roleId join [Company] c ON c.companyId = ur.companyId").addEntity(UserRole.class);
通过这一行,我得到了UserRoles的列表,但所有基础对象均为NULL。
可能是因为您已将UserRole中的字段映射为延迟加载?(或者没有指定,我相信默认是延迟加载)
尝试写一些类似的东西
Object obj = userRoles.get(0).getName(); //Or any of the previously null valued fields you have in there
确保您仍在会话中编写此内容,最好是在query.list();之后;本身
这应该延迟加载值,如果确实如此,请考虑初始化休眠对象。
编辑:如果您正在寻找更合适的方法,实际上有一个休眠方法要求初始化代理对象,我不确定为什么它比从代码中获取要初始化的东西更好,但是它肯定更漂亮。
Hibernate.initialize(Object initializeMe)
但是据我所知,这是一个浅层方法,这意味着它不会在该方法内部加载实体。要实现这一目标,您需要手工完成,或者需要一个可以加载所有内容的通用方法,请考虑反射和递归。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句