Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JPQL:以下WHERE子句使用继承时出现问题_Java_Sql_Jpa_Where Clause_Jpql - Fatal编程技术网

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

Java JPQL:以下WHERE子句使用继承时出现问题,java,sql,jpa,where-clause,jpql,Java,Sql,Jpa,Where Clause,Jpql,我使用以下查询来获取与用户链接的所有水果 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).g

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

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();
}

}

}

}

问题是,如果用户不存在任何集合,上述查询不会给出结果。因此,如果用户没有苹果,我不会得到0作为结果。我已经试着用语句捕捉错误,比如u.apples不是空的,等等,但它也不起作用

那么,你能给我一个关于这个案子的提示吗?如果水果与用户有一对多的关系,那么整个事情会更容易,但不幸的是,我不能为程序支付这个费用


提前谢谢

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

你的JPQL无效,所以我根本不确定它是如何工作的

您只能在一个图标上使用“.”符号,而不是ToMany,对于ToMany,您需要使用联接。对于联接,可以使用外部联接来不允许任何联接

SELECT DISTINCT f FROM Fruit f, User u left join u.apples a ... WHERE f = a or ...
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;
...
SELECT DISTINCT f FROM Fruit f, User u left join u.apples a ... WHERE f = a or ...