【问题标题】:Hibernate HQL from child to parent table using left join使用左连接将 HQL 从子表休眠到父表
【发布时间】:2016-06-30 14:17:53
【问题描述】:

模型中有两张表:person、role

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 开始加入并转到可选角色。

最好的方法是什么?

【问题讨论】:

  • 检查我更新的问题

标签: java sql hibernate hql


【解决方案1】:

更新答案

试试这个:

在您的Person 类中添加如下属性:

List<Role> lstRole;

这样当你写你的查询时:

SELECT P FROM Person P

您将为每个人获得一个关联角色的列表。

【讨论】:

  • 最后应用了非常相似的解决方案。创建了带有 @OneToMany 注释的新字段 (List personRoles),并且可以在 HQL 中选择 person.name, role.name from Person person left join person.personRoles proles left join proles.role 角色。这似乎是多余的,但似乎有效。
  • 想要获取查询中的所有数据,因为它是延迟加载的,并且有很多行,在每次迭代中获取所有角色会很慢。不能使用子查询来获取一个人的所有角色对象,除非对角色表的每个字段使用聚合函数,而不是获取角色对象列表或为该人的每个角色设置多行。
  • 好的,祝你有美好的一天;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-09-25
  • 1970-01-01
  • 1970-01-01
  • 2012-09-06
  • 2017-07-30
  • 1970-01-01
  • 2016-09-07
相关资源
最近更新 更多