Engineering Note

[Error Handling] flush 메서드 오류 본문

Error Handling

[Error Handling] flush 메서드 오류

Software Engineer Kim 2025. 10. 15. 17:42

 

에러메세지

jakarta.persistence.TransactionRequiredException: No EntityManager with actual transaction available for current thread - cannot reliably process 'flush' call

	at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:304)
	at jdk.proxy2/jdk.proxy2.$Proxy157.flush(Unknown Source)
	at com.shop.repository.ItemRepositoryTest.findByItemDetailTest(ItemRepositoryTest.java:226)
	at java.base/java.lang.reflect.Method.invoke(Method.java:578)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)

 

에러메세지를 확인하면 transaction이 없는 상태에서 flush를 호출했다는 에러메세지다. 발생한 위치는 ItemRepositoryTest의 226번라인이다.

 

알아두어야 할 개념

  • flush()는 Persistence Context의 변경사항을 DB에 반영하는 작업
  • JPA에서 Persistence Context(영속성 컨텍스트)는 트랜잭션과 생명주기를 같이하는 데 당연히 트랜잭션의 시작을 알려주는 @Transaction 어노테이션이 없으면 영속성 컨텍스트도 없고 flush 메서드를 호출 할 수 없다.

 

Comments