Выберите объект в соответствии со списком связанных объектов. - PullRequest
1 голос
/ 27 апреля 2010

У меня есть следующая схема базы данных:

Две таблицы, книги и метки, с отношением n-m.

Книги - Теги

Мы можем иметь, например, книгу 1 с тегами {A, B, C} и книгу 2 с тегами {A}.

Я бы хотел выбрать книги в соответствии со списком тегов.

Например: список выбранных тегов: {A, B} -> книга 1

Моя идея заключалась в том, чтобы использовать функцию MINUS SQL, вычитать список тегов книги из списка выбранных тегов и возвращать книгу, если список был пустым. К сожалению, эта функция SQL не поддерживается HQL.

Есть идеи по этому поводу?

1 Ответ

0 голосов
/ 27 апреля 2010

1 / я бы попробовал другой подход, что-то вроде этого:

from
  book 
where
  book.id in (
  select
    b.id
  from
    book b
  where
    b.tags.name in (?)
  group by
    b.id
  having
    count(b.tags.id) = ?
)
  • параметры:
    • первый? : список тегов
    • секунду? : размер списка тегов
  • Я думаю, что все функции, используемые в моем hql, поддерживаются.
  • Если вам не нужен весь объект, а только одно свойство книги, такое как id, вы можете удалить внешний select

2 / если вы предпочитаете свой запрос, вы все равно можете использовать sql-запрос (см. http://docs.jboss.org/hibernate/core/3.3/reference/en/html/querysql.html раздел 16.2).

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