Hibernate Inheritance Queries (Критерии) - PullRequest
       10

Hibernate Inheritance Queries (Критерии)

3 голосов
/ 23 февраля 2012

У меня есть два следующих класса (Java Hibernate):

public class Grupo{
          //plain Attributes
}

и

public class Salon extends Grupo{
          //plain Attributes
}

с объектами обоих типов.

с использованием следующего критерия запроса:

s.createCriteria(Grupo.class).list();

Я получаю все объекты типа Grupo, то есть Grupo и Salon, как и ожидалось. Итак, я хочу знать, что если в Criteria Query есть способ легко получить только объекты «Grupo», которые не являются объектами «Salon». Я хотел бы воздержаться от использования дискриминаторов, если это возможно (в БД оба класса имеют свои таблицы)

Любая помощь будет высоко оценена.

РЕДАКТИРОВАТЬ: Исправлен неправильный синтаксис Java, как хромает меня.

Ответы [ 2 ]

2 голосов
/ 23 февраля 2012

Если вам не нужно использовать Критерии, то вы можете сделать это с помощью hql

s.createQuery("select g from Grupo g where g.class = Grupo").list();

Насколько я знаю, с Критерием у вас должен быть столбец дискриминатора, чтобы это работало.

s.createCriteria(Grupo.class).add(Restrictions.eq("class", "G").list();

если ваше значение дискриминатора для Grupos равно G.

Подход с использованием общего базового класса, предложенный @Mark Robinson, также заслуживает рассмотрения ...

2 голосов
/ 23 февраля 2012

Концептуальная проблема заключается в том, что все объекты Салона являются Группами.

Не могли бы вы изменить Салон, чтобы он не происходил от Grupo, а вместо этого Grupo и Salon делят базовый класс?

В противном случае вам придется использовать дискриминаторы.

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