반응형
트랜잭션 커밋은 어디에서 일어날까?
레파지토리를 만들 때 Spring-Data-Jpa
의 JpaRepository
인터페이스를 상속하였는데, 스프링 데이터에서 기본 구현체를 제공해주기 때문이다.
Spring-Data-Jpa
에서 제공하는 JpaRepository
의 기본 구현체는 SimpleJpaRepository
이다.
(CrudRepository<>
는 단순히 인터페이스이다.)
SimpleJpaRepository
의 save()
메소드에는 스프링 @Transactional
이 붙어있으므로 해당 클래스에 있는 수많은 메소드에 트랜잭션이 걸리게 되고, 메소드 성공적으로 return하게 되면 commit도 이루어지게 되는것이다.
@Transactional
public <S extends T> S save(S entity) {
Assert.notNull(entity, "Entity must not be null.");
if (this.entityInformation.isNew(entity)) {
this.em.persist(entity);
return entity;
} else {
return this.em.merge(entity);
}
}
따라서, save()
메소드와 같이 CRUD method()
를 수행하는 시점이 트랜잭션의 시작 과 종료 커밋 시점임을 알 수 있다.
반응형
'웹 프로그래밍 > [ Spring Data JPA ]' 카테고리의 다른 글
[ Spring Data JPA ] 03. JPA IN Clause (0) | 2021.10.20 |
---|---|
[ Spring Data JPA ] 01. JpaRepository 사용하기 (0) | 2021.10.18 |
[ Spring Data JPA ] 00. Entity와 EntityManager (0) | 2021.10.18 |