Hibernate查询:Set是否包含某个Object?

时间:2012-02-02 16:41:20

标签: hibernate set hql contains

我有两个Hibernate数据对象。第一个是User(具有唯一ID,用户名等),第二个是Collaborateable类。在这两者之间存在n与m的关系(与Sets实现)。这意味着,用户可以在许多Collaborateable上工作,而Collaborateable有很多用户。此外,Collaborateable只有一个用户作为所有者。

<class name="CollaborateableImpl" table="Collaborateable">
<id name="id" type="int" column="id">
    <generator class="increment" />
</id>

<property name="name" column="name" type="string" not-null="true" />
<property name="keywords" column="keywords" type="string"/>

<!-- Collaborateable has a Registered User as owner -->
<many-to-one name="owner" class="UserImpl" fetch="select">
        <column name="User_id_owner" not-null="true" />
</many-to-one>

<!-- Users that collaborate on this Collaborateable -->
<set name="users" table="CollaborateOn" inverse="false">        
        <key column="Collaborateable_id" />         
        <many-to-many column="User_id" class="UserImpl" />    
</set>

我想实现一个Hibernate查询,该查询搜索具有特定用户作为所有者的Collaborateable,或者在Collaborateable.users集中包含相同的特定用户。此外,还应该有一个简单的WHERE子句来检查关键字。

Hibernate中是否有类似CONTAINS运算符的东西?

例如:

FROM CollaborateableImpl WHERE (owner = :user OR users CONTAINS :user) AND keywords like '%:searchString%'

否则,你知道怎么用连接来解决这个问题吗?

1 个答案:

答案 0 :(得分:40)

您正在寻找elements关键字。

select c 
FROM CollaborateableImpl c 
WHERE (
    c.owner = :user 
    OR :user in elements(c.users)
)
AND c.keywords like '%:searchString%'