我有以下实体:
我需要查询允许一个(或几个)所选角色的所有页面组。查询的页面组不能包含所有页面。查询页面组的所有页面都必须具有选定的角色。
我怎么能意识到这一点?我想我必须使用@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
}
答案 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列表所标识的角色相关联。