返回Hibernate中的对象列表

时间:2016-09-27 13:55:35

标签: sql-server hibernate java-8

我正在编写一个使用Hibernate查询数据库(SQL Server)的应用程序。 现在我正在查询所有项目的链接表。

查询如下:

"FROM UserRole ur join ur.platformUser join ur.role join ur.company"

我需要列表中的所有UserRoles对象,但是当我查询上面的查询时,我得到了一个包含UserRole,Role,Company和PlatformUser对象的对象arrao。

enter image description here

我只需要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。

1 个答案:

答案 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)

但据我所知,这是一个浅薄的方法,这意味着它不会加载实体内部的实体。为了达到这个目的,你需要手工完成,或者制作一个能够加载所有东西的通用方法,思考反射和放大。递归。