Предположим, у меня есть несколько классов, например:
OpA extends Operation
OpA1 extends OpA
OpA2 extends OpA
OpB extends Operation
OpB1 extends OpB
OpB2 extends OpB
OpB3 extends OpB
OpC extends Operation
Operation
|
/-----------------------------\
/ | \
OpA OpB OpC
/ |
/ |
/------\ /-----------\
/ \ / | \
OpA1 OpA2 OpB1 OpB2 OpB3
Если я хочу найти некоторые операции, я могу сделать это:
session.createCriteria(Operation.class)
.add(...)
.add(...)
.addOrder(...)
.setFirstResult(...)
.setMaxResults(...)
.list();
Но что, если я хочу применить эти критерии не ко всем операциям типа Operation.class
, а только к операциям типов: OpA2
+ OpB1
+ OpB3
+ OpC
?
Мой вопрос: как это сделать, используя только критерии Hibernate? Пожалуйста, не используйте HQL.
Примечание. Я не знаю, следует ли мне рассматривать эту проблему как «запрос более чем одного класса» (где все они имеют поля с теми же именами, что и те, которые я запрашиваю), или я должен рассматривать ее как «ограничение запроса по списку подклассов».
Изменить: если бы я мог создать интерфейс TheOnesIWant
, а затем заставить классы OpA2
, OpB1
, OpB3
и OpC
реализовать этот интерфейс, это дало бы мне желаемый результат: session.createCriteria(TheOnesIWant.class)
Но я не могу этого сделать, потому что Я знаю только те классы, которые хочу запрашивать во время во время выполнения. Приведенная выше иерархия классов является лишь примером.