gpt4 book ai didi

java - JPQL:以下使用继承的 WHERE 子句的问题

转载 作者:行者123 更新时间:2023-11-30 11:54:16 26 4
gpt4 key购买 nike

我正在使用以下查询来获取与用户链接的所有水果。

return (List<Fruit>) getEm()
.createQuery(
"SELECT DISTINCT f FROM Fruit f, User u WHERE (f = u.apples OR f = u.oranges OR f = u.mangos) AND u.id = :id")
.setParameter("id", id).getResultList();

对应的实体如下:

public class Fruit{

private int id;

public class User{

private int id;
private Collection<Apple> apples;
private Collection<Orange> oranges;
private Collection<Mango> mangos;

public class Mango extends Fruit{

private int id;
...

public class Apple extends Fruit{

private int id;
...

public class Orange extends Fruit{

private int id;
...

问题是,如果用户不存在任何集合,上述查询不会给我结果。因此,如果用户没有苹果,我不会得到 0 作为结果。我已经尝试使用 u.apples IS NOT EMPTY 等语句来捕获错误,但它也确实有效。

那么,你能给我一个关于这个案子的小费吗?如果 Fruit 与用户具有一对多关系,那么整个事情会更容易,但不幸的是,我不能为程序负担得起......

提前致谢!

最佳答案

您的 JPQL 无效,所以我完全不确定它是如何工作的。

您只能使用“.” ToOne 上的符号不是 ToMany,对于 ToMany,您需要使用连接。对于联接,您可以使用外部联接来不允许任何联接。

SELECT DISTINCT f FROM Fruit f, User u left join u.apples a ... WHERE f = a or ...

关于java - JPQL:以下使用继承的 WHERE 子句的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5796351/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com