繁体   English   中英

对ElementCollection的JPQL选择查询

[英]JPQL select query for ElementCollection

我有以下实体与enum集合。 我想用enum参数搜索用户。
用户可能拥有多个权限。 当我使用Permission.APPROVE参数搜索用户时,可能有一个或多个用户拥有该权限。 我该如何编写JPQL查询?

User.java

@Entity
....
public class User implements Serializable {

    @ElementCollection(targetClass = Permission.class)
    @Enumerated(EnumType.STRING)
    @CollectionTable(name = "USER_PERMISSION", joinColumns = @JoinColumn(name = "PERMISSION", referencedColumnName = "ID")) 
    private List<Permission> permisssionList;
}

Permission.java

public enum Permission {
    REGISTER, APPROVE, REJECT, CONFIRM;
}

怎么写 ?

public List<User> findUserList(Permission permission) { 
    Query q = em.createQuery(.....);
    result = q.getResultList();
}

@Embeddable@CollectionTable只是映射One To Many关系的一种简单方法,它们不能直接查询也不能持久化,但肯定可以加入,就像你对任何一对多关系一样:

"select user from User user join user.permissionList p where p = :permission"

并将枚举作为常规参数传递

从规格

枚举文字支持使用Java枚举文字语法。 必须指定完全限定的枚举类名。

select u from User u where u.Permission = XX.XX.Permission.APPROVE

试试这个吧。

String jpql = 
    "select u from User u join u.permission p"
    + " where p = :enumeration";
Query query = em.createQuery(jpql);
query.setParameter("enumeration", XX.XX.Permission.APPROVE);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM