如何确定两个列表是否与Hibernate共享任何对象

时间:2017-06-30 23:40:35

标签: java hibernate join orm hql

我创建了这个示例SQL查询,它尝试查找具有关联REPORT对象的所有REPORT_PERMISSION,其中包含当前用户也拥有的USER_GROUP之一。因此,有许多REPORT_PERMISSION个对象将报表绑定到一个组,并且用户可以拥有多个组,其中一个组必须匹配以允许用户查看报表。我只是不确定如何在HQL中写这个

SELECT * FROM REPORT r
JOIN REPORT_PERMISSION rp 
    on r.id = rp.report_id and rp.user_group_id in 
        (SELECT l.user_group_id FROM USER_GROUP_LINK l where l.user_id = 2)
where r.type = 'GENERAL';

1 个答案:

答案 0 :(得分:0)

应该是这样的:

Query reportQuery = entityManager.createQuery
   ("select distinct rep from Report rep  
                         join rep.reportPermissions per 
                         join per.userGroups gr 
                         join gr.users u 
                         where u.id = :userId and rep.type = 'GENERAL'");
reportQuery.setParameter("userId" , user.getId());

示例映射(在hql中使用的名称和映射中的fileds名称):

rep.reportPermissions - Collection< ReportPermission> reportPermissions in Report;

per.userGroups - Collection<用户组> ReportPermission中的userGroup;

gr.users - Collection<使用者名称> UserGroup中的用户;

u.id - @Id Long id;在用户类