Hibernate - 通过子集合过滤子集合

时间:2015-06-16 19:24:51

标签: java hibernate jpa

我有以下实体:

  1. 页面组 - 包含页面。
  2. 页面 - 页面组下方,具有访问权限。
  3. 作用。
  4. 我需要查询允许一个(或几个)所选角色的所有页面组。查询的页面组不能包含所有页面。查询页面组的所有页面都必须具有选定的角色。

    我怎么能意识到这一点?我想我必须使用@Filter但不知道如何。

    数据库方案如下: enter image description here

    页面组列表:

    @Entity
    @Table(name = "PAGE_GROUP")
    public class PageGroup {
    
        @Id
        @Column(name = "pg_id")
        private long id;
        @Column(name = "SOME_FIELD")
        private String field;
        @OneToMany(mappedBy = "group")
        private Set<Page> pages;
    }
    

    网页列表:

    @Entity
    @Table(name = "page")
    public class Page {
    
        @Id
        @Column(name = "p_id")
        private long id;
        @Column(name = "some_field")
        private String field;
        @JoinColumn(name = "pg_id")
        @ManyToOne
        private PageGroup group;
    
        @ManyToMany
        @JoinTable
        private Set<Role> roles;
    }
    

    角色列表

    @Entity
    @Table(name = "role")
    public class Role {
    
        @Id
        @Column(name = "r_id")
        private long id;
    
        @Column(name = "some_field")
        private Date field;
        //important: no Page reference
    }
    

1 个答案:

答案 0 :(得分:0)

在JPQL中,您可以使用以下查询:

SELECT pg FROM PageGroup pg LEFT JOIN pg.pages p LEFT JOIN p.roles r
WHERE r.id IN (....<list of Ids you want>....)

这将返回PageGroup个对象的列表,这些对象的页面与给定的角色ID列表所标识的角色相关联。