Java ElementCollection的JPQL选择查询

Java ElementCollection的JPQL选择查询,java,jpa,jpql,Java,Jpa,Jpql,我有以下带有enum集合的实体。我想用enum参数搜索用户。 用户可能具有多个权限。当我使用参数Permission.APPROVE搜索用户时,可能有一个或多个用户拥有该权限。 如何编写JPQLquery User.java @Entity .... public class User implements Serializable { @ElementCollection(targetClass = Permission.class) @Enumerated(EnumType

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

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;
}
如何写作

public List<User> findUserList(Permission permission) { 
    Query q = em.createQuery(.....);
    result = q.getResultList();
}
公共列表findUserList(权限){
Query q=em.createQuery(…);
结果=q.getResultList();
}
来自规范

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

试试这个

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);

@embeddeble
@CollectionTable
只是一种映射一对多关系的简单方法,它们不能直接查询,也不能持久化,但肯定可以连接,就像处理任何一对多关系一样:

"select user from User user join user.permissionList p where p = :permission"
并将枚举作为常规参数传递

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);
"select user from User user join user.permissionList p where p = :permission"