我正在编写一个使用Hibernate查询数据库(SQL Server)的应用程序。 现在我正在查询所有项目的链接表。
查询如下:
"FROM UserRole ur join ur.platformUser join ur.role join ur.company"
我需要列表中的所有UserRoles对象,但是当我查询上面的查询时,我得到了一个包含UserRole,Role,Company和PlatformUser对象的对象arrao。
我只需要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。
答案 0 :(得分:1)
可能是您已将UserRole中的字段映射为延迟加载? (或者没有指定,我相信延迟加载是默认的)
尝试按照
的方式写一些内容Object obj = userRoles.get(0).getName(); //Or any of the previously null valued fields you have in there
确保你仍然在会话中写这个,最好是在query.list()之后;本身
这应该延迟加载值,如果确实如此,请查看初始化hibernate对象。
编辑: 如果你正在寻找一种更合适的方法来实现这一点,实际上有一个hibernate方法请求初始化一个代理对象,我不确定为什么它比只想从代码初始化你想要的东西更好,但它肯定是漂亮。
Hibernate.initialize(Object initializeMe)
但据我所知,这是一个浅薄的方法,这意味着它不会加载实体内部的实体。为了达到这个目的,你需要手工完成,或者制作一个能够加载所有东西的通用方法,思考反射和放大。递归。