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"