У меня есть модель данных Hibernate / JPA, которая позволяет размещать объекты (MyObj) в различных категориях (MyCategory). Каждая категория может иметь 0 или более подкатегорий, а категории, которым вместо этого не назначена классификация (MyClassification). Модель данных выглядит примерно так:
public class MyObj {
…
protected MyCategory category = null;
…
}
public class MyCategory {
…
protected MyClassification classification=null;
protected List<MyCategory> childCategories=null;
protected MyCategory parentCategory=null;
…
}
public class MyClassification {
…
}
Я бы хотел иметь возможность запрашивать экземпляры MyObj на основе классификации, категории или подкатегории. Например, если у меня есть 3 классификации (classA, classB и classC) и 6 категорий (например, categoryA1, categoryA2, categoryB1 и т. Д., Где имя соответствует классификации), и у каждой из этих категорий есть 3 подкатегории (например, subcatA1, subcatA2, subcatA3, subcatB1 и т. д.) Я хотел бы выполнить такие запросы:
- Все экземпляры MyObj в классификационном классе A (независимо от категории или подкатегории)
- Все экземпляры MyObj в категории categoryA1 (независимо от подкатегории)
Я создал пару NamedQueries, которые, как я думал, позволят это сделать. Они отлично работают для случаев, когда экземпляр MyObj был назначен подкатегории. Однако, если я помещаю экземпляр MyObj в категорию (без подкатегории) и выполняю запрос на основе класса, я его не вижу. Я вижу только экземпляры MyObj, которые находятся внутри подкатегории. Мои запросы выглядят так:
MyObj.findByClass = "SELECT DISTINCT o FROM MyObj o WHERE (o.category.classification = :classification OR o.category.parentCategory.classification = :classification)"
MyObj.findByCategory = "SELECT DISTINCT o FROM MyObj o WHERE (o.category = :category OR o.category.parentCategory = :category)"
Может кто-нибудь сказать мне, где ошибка в моей логике для этих запросов? Есть ли лучший способ сделать то, что я хочу?