在JPQL中将本机查询转换为命名查询

时间:2013-08-02 23:00:52

标签: java jpa 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。任何sugestions或想法如何解决这个?

非常感谢!

致以最诚挚的问候,

JB

1 个答案:

答案 0 :(得分:0)

基本上,您需要翻译原生查询,就像在JPA First中一样。见下面的样本。

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
                   )

现在根据您的要求添加/修改条件。

注意:如果有帮助,请接受答案