【发布时间】:2020-04-16 08:50:43
【问题描述】:
我有一个具有父菜单的菜单实体:
public class Menu implements Serializable {
...
@JoinColumn(name = "parent" , nullable = true, referencedColumnName = "id")
@ManyToOne(targetEntity = Menu.class,fetch = FetchType.EAGER, cascade = {}, optional = true)
//@BatchFetch(BatchFetchType.JOIN)
@JoinFetch(JoinFetchType.OUTER)
private Menu parent;
...
}
我会创建查询:
SELECT m.*
FROM menu m LEFT OUTER JOIN menu p ON (p.ID = m.parent)
WHERE (m.idapp = 1) ORDER BY p.ID ASC NULLS FIRST, m.order ASC
我有一个命名查询:
SELECT m FROM Menu m LEFT OUTER JOIN Menu mp
WHERE m.applicazione.id = :idapp
ORDER BY mp.id ASC NULLS FIRST, m.ordine ASC
但结果是:
SELECT ...
FROM menu t1 LEFT OUTER JOIN menu t0 ON (t0.ID = t1.parent), menu t2
WHERE (t1.idapp = ?) ORDER BY t2.ID ASC NULLS FIRST, t1.order ASC
这是完全错误的,因为表 t2 创建了一个笛卡尔积。
有什么问题?为什么要添加t2?
我还添加了 JoinFetch 注释,但它被忽略了,我现在不知道为什么。
【问题讨论】:
标签: jpa eclipselink named-query