2013-07-27 65 views
1

這是關於提取文檔的查詢。該文件有兩種邀請類型。休眠查詢

->OPEN : View all user 
->LIMITED : Show to limited user 

Hibernate映射是如下:

<list name="invitedUsers" cascade="refresh" table="document_user_map"> 
<key column="document_id"/> 
<index column="position" type="integer"/> 
<many-to-many class="com.v4common.shared.beans.usermanagement.User" column="user_id"/> 
</list> 
<property name="invitationType" column="invitation_type" 
type="com.resources.userenum.UserEnumInvitationType" /> 

用戶可以參與僅是開放的,得到了​​有限的類型邀請這些文件。

我可以預計到下面的查詢結果:

SELECT * FROM文件左外連接document_user_map上document.id = document_user_map.document_id和document_user_map.user_id = 648

而是通過冬眠,我在方法中添加了下面的標準,但只得到有限的招標而不是其他。

criteria.createAlias(「invitedUsers」,「invitedUser」); criteria.add(Restrictions.or(Restrictions.ne(「invitationType」,InvitationType.LIMITED),Restrictions.or( Restrictions.and(Restrictions.eq(「invitationType」,InvitationType.LIMITED),Restrictions.eq(「invitedUser。 id「,user.getId())),Restrictions.isNull(」invitedUsers「))));

任何人都可以幫助我,我錯了。

編輯: 用戶ID 1應該得到的只是文件1,2,但不是3,而是通過這個標準,我沒有得到的docID 1.

表結構:證件

id name invitation type userid 
----------------------------- 
1 doc1 open   1 
2 doc2 LIMITED  1 
3 doc3 LIMITED  2 

有限公司doc用戶條目:document_user_map

document_id user_id position 
--------------------------- 
2         1        0 
3         2        0 
+0

它很不清楚你在這裏期待什麼。 – taxeeta

+0

@taxeeta編輯問題..我知道任何查詢。 – iMBMT

回答

1

問題通過CriteriaSpecification.LEFT_JOIN解決。 當別名被創建,那麼它會做內部連接,並且它不會在連接爲空時獲取數據。所以我在這裏完成了別名。它會檢查受邀的用戶。

criteria.createAlias(「invitedUser」,「invitedUser」,CriteriaSpecification.LEFT_JOIN); (Restrictions.or(Restrictions.or(Restrictions.isNull(「invitationType」)),Restrictions.ne(「invitationType」,InvitationType.LIMITED)),Restrictions.and(Restrictions.eq(「invitationType」,InvitationType。 ) LIMITED),Restrictions.eq(「invitedUser.id」,user.getId()))));