2012-02-02 11 views
14

Mam dwa obiekty danych Hibernuj. Pierwszy to Użytkownik (z unikalnym identyfikatorem, nazwą użytkownika itp.), A drugi to klasa Współpracująca. Między tymi dwoma istnieje relacja n-to-m (realizet z zestawami). Oznacza to, że Użytkownik działa na wielu elementach Współpracy, a Współpracownik ma wielu użytkowników. Ponadto współpracownik ma dokładnie jednego użytkownika jako właściciela.Zapytanie o hibernację: czy zestaw zawiera określony obiekt?

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

chciałbym wdrożyć kwerendę hibernacji, który wyszukuje Collaborateables które mają pewną użytkownika jako właściciela lub zawierające tę samą określonego użytkownika w zestawie Collaborateable.users. Ponadto powinna istnieć prosta klauzula WHERE, aby sprawdzić słowa kluczowe.

Czy w Hibernate jest coś takiego jak operator CONTAINS?

Na przykład:

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

W przeciwnym razie, czy wiesz, jak rozwiązać ten problem z przyłączyć?

Odpowiedz

35

Poszukujesz słowa kluczowego elements.

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

Jeśli używam kryteriów, jaki jest rodzaj ograniczenia? – jpprade