大家好日子,
我目前正在努力将以下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
;
DB的结构方式是:
此查询的目的是构建一个屏幕集合,该集合应显示所有条目,其所有者(人)及其主要身份(因为只有身份包含人员姓名等)。
到目前为止,我在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}
我在这里做错了什么?或者是否有更好的方法来编写此查询?
感谢您提前抽出时间。
答案 0 :(得分:0)
您需要像这样编写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
因此,您只选择Persons
,但每个人还包含Identity
和Entry
个实体列表。然后,您可以访问UI上每个人的所有条目。