HQL:结合左连接和右连接

HQL: Combine Left and Right Join

大家好,

我目前正在努力将以下 SQL 转换为 HQL:

SELECT
  e.ID,
  p.ID,
  i.ID
FROM
  ENTRY e 
  JOIN PERSON p ON e.FK_PERSON = p.ID 
  RIGHT JOIN IDENTITY i ON i.FK_PERSON = p.ID
WHERE
  i.IS_MAIN_IDENTITY = 1
;

数据库的结构方式是:

这个查询的目的是建立一个屏幕集合,它应该显示所有条目、他们的所有者(人)和他们的主要身份(因为只有身份包含人名等)

到目前为止,我在 HQL 中执行此查询的尝试是:

select 
    entr, 
    pers, 
    iden 
from 
    MEntry entr 
    join entr.entrPerson pers 
    right join iden.idenPerson

但这给了我以下异常:

java.lang.IllegalStateException: No data type for node:
org.hibernate.hql.internal.ast.tree.IdentNode 
\-[IDENT] IdentNode: 'iden' {originalText=iden}

我在这里做错了什么?还是有更好的方法来编写此查询?

提前感谢您抽出时间。

您需要像这样编写 SQL 查询:

SELECT
  e.ID,
  p.ID,
  i.ID
FROM
  PERSON p 
  INNER JOIN ENTRY e ON e.FK_PERSON = p.ID  
  INNER JOIN IDENTITY i ON i.FK_PERSON = p.ID
WHERE
  i.IS_MAIN_IDENTITY = 1

HQL 等价物是:

select 
    p 
from 
    Person p
    join fetch p.entries e
    join fetch p.identity

所以你 select 只有 Persons 但每个人还包含 IdentityEntry 实体列表。然后,您可以访问 UI.

上每个人的所有条目