对ElementCollection的JPQL选择查询

时间:2014-02-21 03:50:11

标签: java jpa jpql

我有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();
}

2 个答案:

答案 0 :(得分:21)

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

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

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

答案 1 :(得分:10)

来自规范

  

Enum文字支持使用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);