[英]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.