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不是空的等语句捕捉错误,但它也不起作用
那么,你能给我一个关于这个案子的提示吗?如果水果与用户之间有一对多的关系,那么整个事情就会变得更容易,但不幸的是,我负担不起这个程序
提前谢谢
# 1 楼答案
怀疑你想加入,而不是=,但是像“为这个程序支付不起”这样的短语让我感到紧张,因为有很多被黑客攻击的东西正在发生
# 2 楼答案
您的JPQL无效,因此我完全不确定它是如何工作的
你只能使用“.”ToOne上的符号不是ToMany,对于ToMany,需要使用join。对于联接,可以使用外部联接来不允许任何联接