Я новичок в 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 подзапросе»