JPA Query DSL 3.7: добавление нескольких столбцов в предложении «NOT IN» - PullRequest
1 голос
/ 09 июля 2019

Я новичок в queryDsl и мне нужно создать запрос, который учитывает два столбца в предложении "NOT IN".

Это запрос mysql, который я хочу выполнить:

SELECT 
*
FROM
  organization.ORG_ROLE
    WHERE
   (ORGANIZATION_ID IN ('test')
    OR ORGANIZATION_ID LIKE 'test1')
    AND (ROLE_ID,ORGANIZATION_ID) NOT IN (SELECT 
        ROLE_ID,ORGANIZATION_ID
    FROM
        ORG_USER_ROLE
    WHERE
        USER_ID LIKE 'ankur_bisht');

Это код Java, который я пытался заставить этот запрос работать:

    Expression<?>[] projection = { qUserRole.roleId, qUserRole.organizationId };

    JPASubQuery innerQuery = new JPASubQuery().from(qUserRole).where(qUserRole.userId.eq(userId));

    JPQLQuery jPQLQuery2 = query.from(qRole).where(qRole.isActive.eq(true)
            .and((qRole.organizationId.in("test")
                    .or(qRole.roleType.roleTypeId.equalsIgnoreCase("test1"))))
            .and(Expressions.list(qRole.roleId, qRole.organizationId).notIn(innerQuery.list(projection))));

Но запрос не выполняется.

Это последний запрос:

SELECT (ALL columns) FROM ORG_ROLE t0 
WHERE (((t0.IS_ACTIVE = ?) AND ((t0.ORGANIZATION_ID = ?) OR (LOWER(t0.ROLE_TYPE_ID) = ?))) 
AND 
(ORG_ROLE.ROLE_ID, ORG_ROLE.ORGANIZATION_ID) 
NOT IN (SELECT t1.ROLE_ID, t1.ORGANIZATION_ID FROM ORG_USER_ROLE t1 
WHERE (t1.USER_ID = ?)))

Я теряю значение псевдонима в (ORG_ROLE.ROLE_ID, ORG_ROLE.ORGANIZATION_ID)

, и это вызывает следующую ошибку:

RootCause:com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: неизвестный столбец «ORG_ROLE.ROLE_ID» в «IN / ALL / ANY подзапросе»

...