JPQL 元素集合的选择查询

2022-09-03 16:51:34

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

用户.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;
}

权限.java

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

怎么写?

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

答案 1

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

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

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


答案 2

从规格

枚举文本支持使用 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);

推荐