2012-02-02 18 views
14

Ho due oggetti dati Hibernate. Il primo è un utente (con ID univoco, nome utente ecc.) E il secondo è la classe Collaborateable. Tra questi due c'è una relazione n-to-m (implementet con Sets). Ciò significa che un utente lavora su molti Collaborateables e un Collaborateable ha molti utenti. Inoltre, Collaborateable ha esattamente un utente come proprietario.Interrogazione di ibernazione: un set contiene un determinato oggetto?

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

mi piacerebbe implementare una query di Hibernate, che cerca Collaborateables che hanno un determinato utente come proprietario o contenenti lo stesso determinato utente in Collaborateable.users Set. Inoltre, dovrebbe essere presente una semplice clausola WHERE per verificare le parole chiave.

Esiste qualcosa come un operatore CONTAINS in Hibernate?

Ad esempio:

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

In caso contrario, sai come risolvere questo problema con un join?

risposta

35

Stai cercando la parola chiave elements.

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

Se utilizzo criteri quale tipo di restrizione? – jpprade

Problemi correlati