2012-02-02 4 views
14

私は2つのHibernateデータオブジェクトを持っています。最初はUser(一意のID、ユーザー名など)で、2番目はCollaborateableクラスです。この2つの間にはn対mの関係があります(Setsとのimplementet)。つまり、ユーザーは多くのコラボレーティブルで働き、コラボレートには多くのユーザーがいます。さらに、Collaborateableには所有者として1人のユーザーしかいません。Hibernateクエリ:セットに特定のオブジェクトが含まれていますか?

<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セットで同じ特定のユーザーを含むなど、特定のユーザーを持っているCollaborateablesを検索Hibernateのクエリを、実装したいと思います。また、キーワードを確認するための単純なWHERE句も必要です。

HibernateにCONTAINS演算子のようなものがありますか?例えば

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

そうでない場合は、あなたが参加して、この問題を解決する方法を知っていますか?

答えて

35

あなたはelementsキーワードを探しています。

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

制限を使用する場合、制限の種類は何ですか? – jpprade

関連する問題