2016-09-27 99 views
0

我在写一个使用Hibernate查询数据库(SQL Server)的应用程序。 现在我正在查询所有项目的链接表。休眠中的对象返回列表

查询看起来像:

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

我需要在列表中的所有的UserRole对象,但是当我查询上述查询我得到的UserRole,角色,公司与PlatformUser在它的对象对象的arrao。

enter image description here

我只需要使用的UserRole中的UserRole对象中的其他对象的对象。 我如何在Hiernate中解决这个问题,我可以将结果转化为前例。 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); 

这一行我得到的的UserRole清单,但所有的基本对象是NULL。

回答

1

这可能是因为你已经将UserRole中的字段映射为延迟加载? (或者没有指定,相信延迟加载默认设置)

尝试沿着

Object obj = userRoles.get(0).getName(); //Or any of the previously null valued fields you have in there 

行写的东西确保您会话中仍然在写这个,查询后最好权。名单();本身

应该延迟加载该值,如果确实如此,请查看初始化hibernate对象。

编辑: 如果你正在寻找一个更合适的方法来做到这一点,实际上有一个hibernate方法请求初始化一个代理对象,我不确定为什么它比仅仅获得你想要初始化的东西更好来自代码,但它确实更漂亮。

Hibernate.initialize(Object initializeMe) 

但据我所知,这是一个浅层的方法,这意味着它不会加载这个实体。为了达到这个目的,你需要手工完成,或者创建一个能够加载所有内容的通用方法,并且想要反射&递归。