2012-02-02 14 views
14

İki hazırda bekleme veri nesnesim var. Birincisi bir Kullanıcıdır (benzersiz bir kimlik, kullanıcı adı vb.) Ve ikincisi İşbirliği Sınıfıdır. Bu ikisi arasında bir n-to-m ilişkisi vardır (Set'lere sahip olan set). Bu, bir Kullanıcı'nın birçok Collaborateables üzerinde çalıştığı ve Collaborateable'ın birçok kullanıcısı olduğu anlamına gelir. Buna ek olarak, bir İşbirliği Yapabilir'in tam olarak bir Kullanıcı sahibi vardır.Hazırda bekletme sorgusu: Set belirli bir nesne içeriyor mu?

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

i belli sahibi olarak VEYA Collaborateable.users Set aynı belli Kullanıcının içeren var Collaborateables arar bir hazırda sorgusu uygulamak istiyoruz. Ayrıca, Anahtar Kelimeleri kontrol etmek için basit bir WHERE yan tümcesi olmalıdır.

Hazırda bekleyen bir CONTAINS operatörü gibi bir şey var mı?

Örneğin

:

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

Aksi takdirde, bir katılmak ile bu sorunu çözmek için nasıl anlarım?

cevap

35

elements anahtar sözcüğünü arıyorsunuz.

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

Kısıtlama kullanırsam Kısıtlama türü nedir? – jpprade

İlgili konular