Допустим есть какая-то книга
public class Book {
private Set<Tag> tags;
}
И теги
public class Tag{
private String name;
}
Между ними связь many-to-many через 3 таблицу (book_tag). Нужно найти книги, которые содержать заданные теги. То есть допустим Книга1(Тег1), Книга2(Тег1, Тег2, Тег3), Книга3(Тег1, Тег2, Тег4), Книга4(Тег2) и я хочу получить книги содержащие Тег1 и Тег2. То есть ожидаю получить Книгу2 и Книгу 3.
Как можно получить это на SQL & HQL & Criteria?
Спасибо!
На SQL это
SELECT books.book_id, books.book_title
FROM books
JOIN books_tags USING (book_id)
JOIN tags USING (tag_id)
WHERE tags.name in ('tag-1', 'tag-2')
GROUP BY books.book_id, books.book_title
HAVING COUNT(DISTINCT tag_id) = 2
Сборка персонального компьютера от Artline: умный выбор для современных пользователей