본문 바로가기
강의 정리/스프링 데이터 JPA

3. 확장 기능

by 이석준석이 2021. 1. 14.

1. 사용자 정의 Repository 구현

 

  • Spring Data Jpa 는 인터페이스만 정의
  • 구현체는 스프링이 자동생성해준다.

인터페이스의 메소드를 직접 구현하고싶다면?

 

  1. 인터페이스를 한개 생성한다.
    • 인터페이스 내에 구현하고자 할 메소드를 정의한다.
  2. 1번에서 생성한 인터페이스에 대한 구현체를 생성한다.
    1. 구현체는 공통인터페이스 + Impl 로 이름을 맞춰줘야 한다.
  3. 공통 인터페이스에 구현체를 상속받는다.
    • public interface MemberRepository extends JpaRepository<Member, Long>, MemberRepositoryCustom(2번의 구현체)

2. Auditing

 

순수 JPA 를 사용한 Auditing

  • 상속을 통하여 사용한다.
  • @PrePersist / @PostPersist / @PreUpdate / @PostUpdate
@MappedSuperclass
public class JpaBaseEntity {

    @Column(updatable = false)
    private LocalDateTime createdDate;
    private LocalDateTime updatedDate;

    // 저장하기 전
    @PrePersist
    public void prePersist() {
        LocalDateTime now = LocalDateTime.now();
        createdDate = now;
        updatedDate = now;
    }

    // 업데이트 하기 전
    @PreUpdate
    public void preUpdate() {
        updatedDate = LocalDateTime.now();
    }
}

 

Spring Data Jpa 를 사용한 Auditing

  • 설정이 필요하다.
    • @EnableJpaAuditing
@EntityListeners(AuditingEntityListener.class)
@MappedSuperclass
public class BaseEntity {

    @CreatedDate
    @Column(updatable = false)
    private LocalDateTime createdDate;

    @LastModifiedDate
    private LocalDateTime lastModifiedDate;

    @CreatedBy
    @Column(updatable = false)
    private String createdBy;

    @LastModifiedBy
    private String lastModifiedBy;
}

 

  • createdBy, modifiedBy 는 세션에서 아이디를 꺼내는 등 해서 사용하면 좋다.
@Bean
public AuditorAware<String> auditorProvider() {
    return () -> Optional.of(UUID.randomUUID().toString());
}

 

 

'강의 정리 > 스프링 데이터 JPA' 카테고리의 다른 글

2. 쿼리 메소드 기능  (0) 2021.01.10
1. extends JpaRepository  (0) 2021.01.10