有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java JPQL:以下WHERE子句使用继承时出现问题

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

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.Apple不是空的等语句捕捉错误,但它也不起作用

那么,你能给我一个关于这个案子的提示吗?如果水果与用户之间有一对多的关系,那么整个事情就会变得更容易,但不幸的是,我负担不起这个程序

提前谢谢


共 (2) 个答案

  1. # 1 楼答案

    怀疑你想加入,而不是=,但是像“为这个程序支付不起”这样的短语让我感到紧张,因为有很多被黑客攻击的东西正在发生

  2. # 2 楼答案

    您的JPQL无效,因此我完全不确定它是如何工作的

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

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