컴퓨터/Java

don't flush the Session after an exception occurs 이슈 해결

곤정이 2023. 4. 9. 22:01
반응형

Hibernate 기반 back end 작업을 진행하다보면

org.hibernate.AssertionFailure: null id in net.~~~~Entity entry (don't flush the Session after an exception occurs)

라는 오류를 만나볼 수도 있는데 해당 이슈를 격어보고 정보를 공유하고자 합니다.

 

원인 :

@Transaction 내에서 DB sql 작업(insert, update 등) 중 장애가 발생한 경우

entity manager에 exception 발생이 기록된 상황입니다.

그때, 우리가 DB에 새로운 작업을 요청하게 되면 위와 같은 이슈가 발생하게 되는데

hibernate exception이 발생한뒤 세션을 자동으로 clear하진 않기 때문입니다.

repository.save()를 선언하였지만 hibernate는 entity를 detached 상태로 잡고 있다가

transaction을 종료하기 직전에 flush를 하게되는데

이때 발생한 이슈로 인해서 entity의 id값이 Null 로 남아있는 상태인 것 입니다.

 

해결:

위 해결은 크게 2가지 방향을 제시할 수 있다.

1. entity manager를 clear() 처리

2. @Transaction을 분리

clear를 통하여 id가 null로 남은 entity 데이터를 제거하거나,

작업중인 transaction을 종료 후 새로운 transaction으로 처리하면 위 이슈는 해소할 수 있었습니다.

 

자신의 비지니스 구조에 맞춰서 clear를 할지 transaction을 분리할지 정하여보자 :)

반응형