2016-06-30 40 views
0

在模型中有两个表:人员,角色休眠HQL从子表到父表使用左连接

PersonRole java类建模N:M关系。它有两个属性@ManyToOne:
人的人,角色作用

我有一个HQL查询检索属于一个角色的所有用户:

select role.name, person.name from PersonRole pr join pr.person join pr.role 

需要一轮做其他方式:所有角色为一个人。但是,如果一个人没有的角色仍需要检索的人(左连接)

select person.name, ro.le.name from PersonRole pr join pr.person join pr.role 

这不是主要的实体工作是PersonRole并返回只与角色的用户。不知道如何从Person开始连接并在Person实体中没有任何属性引用角色时转到可选角色。

最好的办法是怎么做的?

+0

检查我更新的问题 –

回答

1

修订ANSWER

试试这个:

把你Person类的属性如下:

List<Role> lstRole; 

这样,当你写你的查询:

SELECT P FROM Person P 

你会得到每个人都有一个关联角色列表。

+0

最后应用非常类似的解决方案。创建新字段(列表 personRoles)用@OneToMany注释,并可以在HQL中选择person.name,role.name从Person人左连接person.personRoles proles左连接proles.role角色。看起来多余,但似乎工作。 – kandan

+0

想要获取查询中的所有数据,因为它是惰性加载的,并且有很多行,因此在每次迭代中获取所有角色的速度会很慢。不能使用子查询来获取人员的所有角色对象,除非对角色表的每个字段使用聚合函数,而不是获取角色对象的列表或对于该人员的每个角色具有多个行。 – kandan

+0

好的,祝你有美好的一天;) –