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