web-dev-qa-db-ja.com

Hibernateクエリ:セットには特定のオブジェクトが含まれていますか?

2つのHibernateデータオブジェクトがあります。 1つ目はユーザー(一意のID、ユーザー名など)で、2つ目はCollaborateableクラスです。この2つの間にn対mの関係があります(Setsを使用した実装)。つまり、ユーザーは多くのCollaborateableで作業し、Collaborateableには多くのユーザーがいます。さらに、Collaborateableには所有者として1人のユーザーがいます。

<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>

collaborateable.usersセットに同じ特定のユーザーを含む所有者ORキーワードをチェックするための単純なWHERE句。

HibernateにCONTAINS演算子のようなものはありますか?

例えば:

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

それ以外の場合は、結合を使用してこの問題を解決する方法を知っていますか?

17
sockeqwe

elements キーワードを探しています。

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