Я использую следующий запрос для получения всех фруктов, связанных с пользователем.
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 НЕ ПУСТО и т. Д., Но это тоже работает.
Так, не могли бы вы дать мне подсказку по этому делу? Все было бы проще, если Fruit будет иметь отношение один-ко-многим к пользователю, но, к сожалению, я не могу позволить себе это для программы ...
Заранее спасибо!