我有以下实体:
页面组-包含页面。
页面-页面组下面的页面,具有访问角色。
角色。
我需要查询允许一个(或几个)所选角色的所有页面组。查询的页面组不能包含所有页面。为页面组查询的所有页面必须具有选定的角色。
我怎么能意识到这一点?想我必须使用@Filter但不知道如何。
数据库方案如下:
页面组列表:
@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
}
最佳答案
在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列表标识的角色相关联的页面。