Допустим, Student является родительским классом в иерархии наследования, которая включает ComputerScienceStudent и ITStudent. Студент определяет поле с именем favourColors, которое представляет собой типизированную коллекцию строк. Используя API критериев, я бы хотел запросить всех студентов, которые указали «синий» в качестве одного из своих любимых цветов.
Вот соответствующий фрагмент кода Java
@Entity
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
abstract class Student {
@CollectionOfElements
Set<String> favoriteColors = new TreeSet<String>();
Я посмотрел документацию по спящему режиму, найденную на http://docs.jboss.org/hibernate/core/3.3/reference/en/html/querycriteria.html, и похоже, что это может быть началом
List students = sess.createCriteria(Student.class)
.createCriteria("favoriteColors")
.add( Restrictions.eq(??????, "blue") )
.list();
но я не знаю, что заполнять в качестве имени свойства, поскольку String не является классом, который я определил (таким образом, ??????)
Я бы очень хотел избежать использования HQL, если нет абсолютно никакого способа сделать это с использованием критериев. Я также хотел бы избежать добавления sqlRestrictions. Я не думаю, что пример API будет работать, потому что Student является абстрактным родительским классом в иерархии наследования, и я не могу создать конкретного Student для передачи в качестве примера.
Возможно ли это? Спасибо за ваше время!