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