Как запросить объекты со значением в коллекции строк, используя критерии гибернации? - PullRequest
0 голосов
/ 23 февраля 2010

Допустим, 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 для передачи в качестве примера.

Возможно ли это? Спасибо за ваше время!

1 Ответ

0 голосов
/ 24 февраля 2010

Вы пробовали писать

List students = sess.createCriteria(Student.class)
.add(Restrictions.eq("favoriteColors", "blue") )
.list();

Редактировать: Хорошо, это не работает. Согласно этому связанному вопросу , обращение к элементам коллекций типов значений в настоящее время невозможно при использовании Criteria API.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...