根据关联实体列表选择实体

时间:2010-04-27 08:50:30

标签: hibernate hql

我有以下数据库架构:

两张桌子,书籍和标签,与n-m关系。

图书 - 标记

例如,我们可以使用带有标签{A}的标签{A,B,C}和书籍2的书1。

我想根据标签列表选择书籍。

例如:所选标签列表:{A,B} - >第1册

我的想法是使用MINUS SQL函数,将书签标签列表减去选定的标签列表,如果列表为空则返回书籍。不幸的是,HQL不支持这个SQL函数。

有任何想法吗?

1 个答案:

答案 0 :(得分:0)

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的一个属性,你可以删除外部选择

2 /如果您更喜欢您的查询,您仍然可以使用sql-query(参见http://docs.jboss.org/hibernate/core/3.3/reference/en/html/querysql.html第16.2节)。