2012-02-02 9 views
14

Tôi có hai đối tượng dữ liệu Hibernate. Đầu tiên là một người dùng (với id duy nhất, tên người dùng, vv) và thứ hai là lớp Collaborateable. Giữa hai điều này có một quan hệ n-to-m (implementet with Sets). Điều đó có nghĩa, một người dùng hoạt động trên nhiều Collaborateables và Collaborateable có nhiều người dùng. Ngoài ra, Cộng tác có chính xác một Người dùng làm chủ sở hữu.Truy vấn Hibernate: Bộ có chứa một đối tượng nhất định không?

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

tôi muốn thực hiện một truy vấn Hibernate, mà tìm kiếm Collaborateables rằng có một người dùng nhất định là chủ sở hữu hoặc có chứa các tài khoản nhất định tương tự trong Collaborateable.users Set. Ngoài ra, cũng phải có một mệnh đề WHERE đơn giản để kiểm tra Từ khóa.

Có điều gì giống như toán tử CONTAINS trong Hibernate không?

Ví dụ:

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

Nếu không, bạn có biết làm thế nào để giải quyết vấn đề này với một tham gia?

Trả lời

35

Bạn đang tìm kiếm từ khóa elements.

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

Nếu tôi sử dụng tiêu chí loại Hạn chế là gì? – jpprade