728x90

트랜잭션 2

(@Scheduled 관련) 스케쥴러 관련 메소드안에 JPA 저장하는 메서드가 같이 있을 경우 저장이 안되는 오류

스케쥴러 메소드안에 JPA 저장하는 메서드가 같이 있을 경우, 저장이 안되는 오류가 발생하였다. 스케쥴러가 돌면서 JPA의 프록시에 있는 값에 영향을 준다(프록시 초기화)고 한다. 또한, 트랜잭션 매니저가 @EnableTransactionManagement를 통해 DataSourceTransactionManager로 구성된 경우, 하이버네이트의 begin() 메소드가 AbstractTransactionImpl을 부르지 않는다고 한다. 해결 → @Scheduled 클래스와 @Transacional이 있는 xxService를 분리하여 해결한다. //예제 class schedule { @Schedule go() { service.call(); } } @Transactional class xxService { ..

Spring 2023.08.24

@Transactional(rollbackFor = Exception.class) 에 대해

1. 서론 초반 @Transactional 어노테이션에 대해 자세히 알아보지 않고, 막연히 롤백때 사용한다고 하여 SQL C,U,D 를 할 때마다 메소드 위에 붙여서 사용하곤 하였다. 하지만, 내 코드를 보신 선임께서 단지 @Transactional 만 붙이면 롤백이 안되고, @Transactional(rollbackFor = Exception.class) 을 붙여야 된다고 알려주셨다. 여기에서 뭐 때문인지에 대해 호기심에 트랜잭션에 대해 찾아보다가 내가 생각했던 것 보다 더 많은 기능들이 존재한다는 것을 알고 정리해보려 한다. 2. 트랜잭션이 뭐지? 데이터베이스의 상태를 변경하는 작업 또는 한번에 수행되어야 하는 연산들을 의미한다. begin, commit 을 자동으로 수행해준다. 예외 발생 시 rol..

JPA 2022.08.26
728x90