当oneToMany关系包含使用Hibernate过滤器的值时,如何获取实体

时间:2016-08-05 13:52:26

标签: java hibernate jpa filter

我有用户实体:

public class User implements IStandarizedEntity {

private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "id")
private Long id;

@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(name = "web.user_role",
        joinColumns = {
            @JoinColumn(name = "user_id", referencedColumnName = "id")},
        inverseJoinColumns = {
            @JoinColumn(name = "role_id", referencedColumnName = "id")})
@Size(min = 1, max = 10)
private List<Role> roles = new ArrayList<>();

角色实体:

public class Role implements IStandarizedEntity {

private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "id")
private Long id;

@Column(name = "type")
@Enumerated(EnumType.STRING)
private ERole type;

我正在使用像jpa提供程序一样的hibernate。我想只让具有特定角色的用户。我编写了命名查询来检索所有用户,现在我尝试使用@Filter只检索具有指定角色类型的用户。
我取得的成就是我可以检索所有用户,然后在加载角色时我可以加载已过滤的角色列表,但这不是我想要做的。

1 个答案:

答案 0 :(得分:1)

您可以在查询时过滤角色。 例如:

Select u from User u join fetch u.roles r where r.type = :roleType;

加入提取将返回所有具有与您的过滤器匹配的角色的用户。