반응형
Notice
Recent Posts
Recent Comments
Link
뜌릅
Audit Logging Column이 생성되지 않는 경우 (키중복 save) 본문
반응형
https://twocastle9.tistory.com/64 해당 문서를 먼저 보고 오시는걸 강력 추천합니다. 아니면 이해 못합니다.
해당 문서에서의 에러를 좀더 설명하자면,
위의 에러가 왜 실패하였는지 궁금할 것입니다.
attributes: {timestamp=Fri Jun 16 14:45:49 KST 2023, status=500,
error=Internal Server Error,
message=could not execute statement;
SQL [n/a]; constraint [null];
nested exception is org.hibernate.exception.ConstraintViolationException:
could not execute statement, path=/receipt}
에러의 로그는 위와 같습니다.
어디서 저 에러가 발생한건지 좀더 명확한 에러로그를 찾아보니
com.microsoft.sqlserver.jdbc.SQLServerException: 테이블 'Almighty_99997.dbo.MDCL_INFO',
열 'ENTR_USER_ID'에 NULL 값을 삽입할 수 없습니다.
열에는 NULL을 사용할 수 없습니다. UPDATE이(가) 실패했습니다.
가 나옵니다.
여기서 ENTR_USER_ID가 뭘까요?
바로 AuditLogging을 통하여 스프링부트의 내부 라이브러리가 생성을 할때마다 만들어주는 컬럼입니다. DB에는 not Null이지만 null로 들어갔다는 것이죠.
com.microsoft.sqlserver.jdbc.SQLServerException: 테이블 'Almighty_99997.dbo.MDCL_INFO',
열 'ENTR_USER_ID'에 NULL 값을 삽입할 수 없습니다.
열에는 NULL을 사용할 수 없습니다.
UPDATE이(가) 실패했습니다.
을 다시 살펴보면 뜬금없이 UPDATE가 나옵니다. UPDATE여서 당연히 @CreatedBy 어노테이션이 작동안하는건 당연하고, 근데 이미 DB값에 존재해야 했었는데, 왜 null로 들어갔을까?? 의문이 드실겁니다.
그 이유는 API로직을 살펴보면 해당 쿼리는 CREATE API인것에서 찾을 수 있었습니다. 근데, 첫번째 쿼리가 DB에 먼저 저장되어서 ORM은 UPDATE로 쿼리가 동작한것입니다. 그리고 @CreatedBy는 작동하지 않았고, null이 되어서 실패한것입니다.
이 에러들은 키 중복하여 쓰레드를 사용하여 동시다발적으로 SAVE하게 되는 경우에 생기는 에러라고 생각합니다.
반응형
'SPRING' 카테고리의 다른 글
HIKARICP 데드락(Connection Leak 원인 찾기, feat: JMETER) (0) | 2023.06.21 |
---|---|
HIKARICP Property 설정값이 application파일에서 적용이 안됨. (0) | 2023.06.21 |
부하테스트 (0) | 2023.06.21 |
Soft Delete는 언제 사용하고, 어떻게 사용하나요?? (0) | 2023.06.21 |
Dispatcher Servlet이 뭔가요 (0) | 2023.06.21 |