2013-07-27 217 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()))));