2012-02-02 4 views
14

मेरे पास दो हाइबरनेट डेटा ऑब्जेक्ट है। पहला उपयोगकर्ता है (अद्वितीय आईडी, उपयोगकर्ता नाम आदि के साथ) और दूसरा वर्ग सहयोगी है। इन दोनों के बीच एक एन-टू-एम संबंध (सेट्स के साथ कार्यान्वयन) है। इसका मतलब है कि, उपयोगकर्ता कई सहयोगी कार्यों पर काम करता है और एक सहयोगी के पास कई उपयोगकर्ता हैं। इसके अलावा एक सहयोगी के पास मालिक के रूप में बिल्कुल एक उपयोगकर्ता है।हाइबरनेट क्वेरी: क्या किसी सेट में कोई निश्चित ऑब्जेक्ट होता है?

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

मैं एक हाइबरनेट क्वेरी, कि Collaborateables मालिक के रूप में एक निश्चित उपयोगकर्ता या Collaborateable.users सेट में एक ही कुछ उपयोगकर्ता युक्त है की खोज करता है को लागू करना चाहते हैं। इसके अलावा, कीवर्ड की जांच करने के लिए एक सरल WHERE क्लॉज भी होना चाहिए।

क्या हाइबरनेट में एक 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

संबंधित मुद्दे