다른 블로그들에 나와있는 해결책은 아래와 같습니다.
UPDATE
BATCH_JOB_EXECUTION
SET
END_TIME = NOW(),
STATUS = 'FAILED',
EXIT_CODE = 'COMPLETED'
WHERE
JOB_EXECUTION_ID =
(SELECT
MAX(JOB_EXECUTION_ID)
FROM
BATCH_JOB_EXECUTION
WHERE
JOB_INSTANCE_ID = 1
);
MySQL에서 해당 쿼리를 실행시 Error Code: 1093. You can't specify target table 'BATCH_JOB_EXECUTION' for update in FROM clause
에러를 만납니다.
MySQL은 데이터를 추가나 갱신할 경우 동일한 테이블로 서브쿼리를 사용할 수 없기 때문입니다.
Oracle이나 Postgresql에서는 문제 없이 실행됩니다.
조인을 이용하여 아래와 같은 쿼리로 해결할 수 있습니다.
UPDATE BATCH_JOB_EXECUTION bje
JOIN (
SELECT MAX(JOB_EXECUTION_ID) AS MAX_JOB_EXECUTION_ID
FROM BATCH_JOB_EXECUTION
WHERE JOB_INSTANCE_ID = 1
) subquery
ON bje.JOB_EXECUTION_ID = subquery.MAX_JOB_EXECUTION_ID
SET
bje.END_TIME = NOW(),
bje.STATUS = 'FAILED',
bje.EXIT_CODE = 'COMPLETED';