2013-08-02 36 views
1

轉化本地查詢到名爲查詢我有一個簡單的本地查詢:在JPQL

SELECT DISTINCT 
    * 
FROM 
    permission p 
WHERE 
    p.USER_ID = ? 
     OR p.ROLE_ID IN (SELECT 
      r.id 
     FROM 
      user u 
       JOIN 
      role r ON u.ID = r.USER_ID 
     WHERE 
      r.ROLE_TYPE_ID = ?) 

,我想這個查詢轉換成一個命名查詢(JPQL)是這樣的:

SELECT p 
FROM Permission p 
WHERE p.user =:user OR p.role IN p.user.roles 

但問題是,這是行不通的:我不能這樣用戶IN。任何訴求或想法如何解決這個問題?

非常感謝!

最好的問候,

JB

+0

我看不出有什麼問題,你不應該把它作爲一個本地查詢中。 –

+0

使用'MEMBER OF'而不是'IN' – DannyMo

回答

0

基本上你需要,因爲它是在JPA首先翻譯您的本地查詢。見下面的例子。

SELECT p FROM Permission p 

    WHERE 
     p.user =:user 
    OR 
     p.role IN (
        SELECT r from User as u JOIN u.roles as r where r.roleTypeId = :roleTypeId 
        ) 

現在根據您的要求添加/修改條件。

注:笑納了答案,如果它幫你