JPA Repository.save()

아이스__아메리·2022년 11월 3일
0

JPA

목록 보기
11/18

@Repository 어노테이션이 붙어있을 때 사용

SimplaJpaRepository.save(S entity) 메서드

<S extends T> S save(S entity);

save() 내부 구현에서는 파라미터로 들어온 entity가 새로운 엔티티라면 persist를 호출하고 아니라면 merge한다.

merge는 보통 detach 된 엔티티를 다시 영속 상태로 만들기 위해 사용하는데, 파라미터로 들어온 entity가 영속성 컨텍스트 1차 캐시에 있는지 확인 후 없다면 DB에 select 쿼리를 날려서 조회합니다. DB에서 조회가 되어 1차 캐시에 엔티티가 저장이 되면 트랜잭션 커밋 시점에 파라미터 entity의 값과 1차 캐시에 저장되어 있는 entity의 값을 비교하여 다른 점이 있을 경우 updata 쿼리가 발생한다

반대로, DB에 해당 값이 없을 때 insert 쿼리가 발생한다.

@Entity 엔티티의 @Id값을 통해 새로운 엔티티인지 구분한다.

만약에 DB에 해당 식별자로 하는 데이터가 이미 들어가 있었다면

@Id만 쓰는 엔티티는 Persistable 인터페이스를 사용해서 isNew()를 오버라이딩 함으로써 판단 로직을 변경하시면 된다.

profile
츠케멘 좋아

0개의 댓글