2014-02-21 48 views
8

我有以下實體與enum集合。我想用enum參數搜索用戶。
用戶可能擁有多個權限。當我使用參數Permission.APPROVE搜索用戶時,可能有一個或多個用戶擁有該權限。 我該怎麼寫JPQL查詢?JPQL選擇查詢ElementCollection

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(); 
} 

回答

8

從規範

枚舉文字支持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); 
+0

這就是工作。謝謝支持 – CycDemo

16

@Embeddable@CollectionTable只是一個簡單的方法來映射一對多的關係,它們不能被直接查詢,也沒有堅持,但肯定可以參加,這樣做就像你使用任何一對多的關係:

"select user from User user join user.permissionList p where p = :permission" 

,並通過枚舉作爲常規參數

+0

這是工作。感謝支持 – CycDemo