簡體   English   中英

對ElementCollection的JPQL選擇查詢

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM