hibernate查询:如何对set设置限制

时间:2014-08-04 14:55:51

标签: hibernate hql

我有一个引用另一个类的类。像这样:

Class A {
    int id;
    Set<Class B> setOfClassB;
}

现在,当我为这个类编写HbDAO时,我有一个查询说,只有当集合中的一个B类具有特定条件时,才会带来A类的所有记录。

因此,例如说B类有一个id和一个名字。所以查询说带来A类的所有记录,其中包含至少一个B,其id = 1234,名称=“somename”。

通常如果该集合只是一些内置变量,如int或string,我会写一个这样的查询:

from A.class.getName() aliasOfA where :someID in elements(aliasOfA.setOfClassB);

但是现在有一个类,我不能写这样的查询:

from A.class.getName() aliasOfA where :someID in elements(aliasOfA.setOfClassB.name);

这种情况的正确查询是什么?

从我的观点来看,这是一个可能的解决方案:

  1. 以编程方式进行。使用集合并使用循环搜索集合并丢弃不符合条件的值。
  2. 但我不想这样做。我想指示HQL执行此操作。此外,我不想编写纯SQL查询,因为那时我将不得不在这个上做很多连接。 这些是我最后的度假胜地。

    PS:我搜索了Google,但找不到任何有用的内容。这主要是因为我不明白如何用正确的话说出这个问题。 ^ _ ^

1 个答案:

答案 0 :(得分:1)

只需使用加入:

select distinct a from A a
inner join a.setOfClassB b
where b.id = 1234 and b.name = 'somename'