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 ...