최대 1 분 소요

  • 스프링 데이터 JPA가 제공하는 공통 인터페이스의 구현체
  • org.springframework.data.jpa.repository.support.SimpleJpaRepository

기본적으로 @Repository @Transactional(readOnly= true)가 걸려있다. 데이터가 변경되는 메서드는 메서드에 따로 @Transactional이 걸려있다.

이렇게 findById도 어떻게 구현 되어 있는지 알 수 있다.

  • @Repository적용 : JPA 예외를 스프링이 추상화한 예외로 변경
  • @Transactional : 트랜잭션 적용
    • JPA의 모든 변경은 트랜잭션 안에서 동작
    • 스프링 데이터 JPA는 변경(등록, 수정, 삭제) 메서드를 트랜잭션 처리
    • 서비스 계층에서 트랜잭션을 시작하지 않으면 리파지토리에서 트랜잭션 시작
    • 서비스 계층에서 트랜잭션을 시작하면 리파지토리는 해당 트랜잭션을 전파 받아서 사용
    • 그래스 스프링 데이터 JPA를 사용할 때 트랜잭션이 없어도 데이터 등록, 변경이 가능 했음(사실은 트랜잭션이 리포지토리 계층에 걸려있는 것임)
  • @Transactional(readOnly= true)
    • 데이터를 단순히 조회만 하고 변경하지 않는 트랜잭션에서 readOnly = true옵션을 사용하면 플러시를 생략해서 약간의 성능 향상을 얻을 수 있음.

매우 중요 !!!

  • save() 메서드
    • 새로운 엔티티면 저장 (persist)
    • 새로운 엔티티가 아니면 병합 (merge)
    • JPA 활용편 - 변경 감지와 병합(merge)
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      
      @Transactional  
      public <S extends T> S save(S entity) {  
        Assert.notNull(entity, "Entity must not be null");  
        if (this.entityInformation.isNew(entity)) {  
        this.entityManager.persist(entity);  
        return entity;  
        } else {  
        return this.entityManager.merge(entity);  
        }  
      }
      

그럼 어떻게 새로운 엔티티를 구별 할까? this.entityInformation.isNew(entity)이건 뭘까?

새로운 엔티티를 구별하는 방법

태그: ,

카테고리:

업데이트:

댓글남기기