这是关于获取文档的查询。该文档有两种邀请类型。
->OPEN : View all user
->LIMITED : Show to limited user
休眠映射如下:
<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" />
用户只能参加那些公开的文件,并收到有限类型的邀请。
我可以通过以下查询获得预期结果:
从document.id = document_user_map.document_id和document_user_map.user_id = 648上的文档左外连接document_user_map中选择*
但是通过休眠,我在方法上添加了以下标准,但只得到了有限的投标,而不是其他人。
条件.createAlias(“ invitedUsers”,“ invitedUser”);条件.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
最佳答案
通过CriteriaSpecification.LEFT_JOIN
解决了问题。
创建Alias时,它将进行内部联接,并且当join为null时,它不会获取数据。所以在这里我做了左连接别名。它将检查受邀用户。
条件.createAlias(“ invitedUsers”,“ invitedUser”,CriteriaSpecification.LEFT_JOIN);
条件.add(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()))));
关于java - hibernate 查询,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17895298/