[JPA] JPA Auditing

2020. 2. 16. 18:21·IT/Spring

엔티티에는 보통 해당 데이터의 생성,수정 시간이 포함한다.
예를 들어 새로운 회원이 언제 가입했는지, 그리고 로그인을 마지막으로 언제 했는지를 알기 위해서도 필요한 부분이다.
그럴 때 이제 엔티티마다 날짜 데이터를 등록/수정 하는 코드를 추가하게 되는데, 이럴 때마다 코드는 반복되고, 결국엔 지저분 해지는 결과를 초래한다. 이러한 문제를 해결하는 방법은 뭐가 있을까?
바로 "JPA Auditing" 이다.

1. BaseTimeEntity 만들고, @EntityListeners 을 통해 BaseTimeEntity 클래스가 Auditing 기능을 쓸 수 있도록 만든다.

package com.incheol.app.domain.post;

import java.time.LocalDateTime;

import javax.persistence.EntityListeners;
import javax.persistence.MappedSuperclass;

import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;

import lombok.Getter;

@Getter
@MappedSuperclass // 엔티티들이 BaseTimeEntity을 상속할 경우 BaseTimeEntity에 존재하는 필드들을컬럼으로 인식하도록 하는 어노테이션.
@EntityListeners(AuditingEntityListener.class) // BaseTimeEntity 추상클래서에 Auditing 기능을 포함시키는 어노테이
public abstract class BaseTimeEntity {

    @CreatedDate
    private LocalDateTime createdDate;

    @LastModifiedDate
    private LocalDateTime modifiedDate;

}

2. SpringBootAppApplication 클래스 위에 JPA Auditing 을 활성화 할 수 있도록 어노테이션을 추가한다.

@EnableJpaAuditing //JPA Auditing 어노테이션을 활성화 시키도록 하는 어노테이션.
@SpringBootApplication
public class SpringBootAppApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringBootAppApplication.class, args);
    }

}

3. Jpa Auditing을 쓸 Entity에 BaseTimeEntity을 상속시켜준다.

 BaseTimeEntity을 상속 시킴으로써 Post 엔티티에는 아래와 같이 createdDate, modifiedDate 를 쓸수 있다고 보면 된다. 

 @CreatedDate
 private LocalDateTime createdDate;

 @LastModifiedDate
 private LocalDateTime modifiedDate;
@Getter
@NoArgsConstructor // 기본 생성자 자동 추가 된다.
@Entity // 테이블과 매핑 될 클래스인 것을 나타낸다.
public class Post extends BaseTimeEntity {

    @Id //PK를 나타낸다.
    @GeneratedValue(strategy = GenerationType.IDENTITY) // auto_increament 을 나타내기위한 전략
    private Long id;

    @Column(nullable = false , length = 500) // 컬럼에 대한 옵션 즉, not null과 컬럼의 길이를 정의할 수 있다. 
    private String title;

    @Column(columnDefinition= "TEXT", nullable = false) // 컬럼의 길이를 500자 이상으로 나타내고 싶을 때 columnDefinition = "TEXT" 의 옵션을 적어준다.
    private String content;

    private String author; // 변수 위에 @Column을 붙이지 않아도, 클래스 위에 선언 되어있는 @Entity 어노테이션 때문에 변수 명을 기준으로 테이블의 컬럼이 디폴드로 생겨난다.  

     /*
     * BaseTimeEntity을 상속 시킴으로써 Post 엔티티에는 아래와 같이 createdDate, modifiedDate 를 쓸수 있다고 보면 된다. 
     * 
     *     @CreatedDate
     *  private LocalDateTime createdDate;
     * 
     *  @LastModifiedDate
     *  private LocalDateTime modifiedDate;
     */

    @Builder // 해당 클래스의 빌더 패턴 클래스를 생성한다.
    public Post(String title, String content, String author) {
        this.title = title;
        this.content = content;
        this.author = author;
    }

    public void update(String title, String content ) {
        this.content=content;
        this.title=title;
    }

}

'IT > Spring' 카테고리의 다른 글

[SpringBoot] war 배포  (0) 2020.07.02
[SpringBoot] 파일 다운로드  (0) 2020.07.02
[JUnit] 테스트 기본 - 2  (0) 2020.02.13
[JUnit] 테스트 기본 - 1  (0) 2020.02.13
[JPA] 트랜잭션과 락  (0) 2020.02.12
'IT/Spring' 카테고리의 다른 글
  • [SpringBoot] war 배포
  • [SpringBoot] 파일 다운로드
  • [JUnit] 테스트 기본 - 2
  • [JUnit] 테스트 기본 - 1
infe91
infe91
  • infe91
    돌고 돌아 다시 여기로
    infe91
  • 전체
    오늘
    어제
    • 분류 전체보기 (26)
      • IT (24)
        • Infra (15)
        • DB (0)
        • Spring (7)
        • Microservice (1)
        • IDE (1)
      • 공유 (1)
      • 일상 (1)
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

      펜타아너스
      헤센시티
      비싼요금제
      몽고 DB #도커 #도커 이미지 #도커 컨테이너
      Vagrant #Multi VM #Cpus #Memory #베그란트
      SpringBoot #file #파일 #다운로드 #파일 다운로드
      위버하임
      queryDSL #Spring Boot
      7개월뒤
      젠킨스 #centos7 #허드슨 #Jenkins
      war #톰캣 #스프링부트 #Tomcat
      kg모바일
      Centos7 #RabbitMQ #Managment UI
      cluster #RabbitMQ #disc #ram #cluster node type
      mac #rabbitmq
      미니오 #미니오 설치 #도커 #Docker #Minio #Minio docker
      협동조합형
      centos7 #systemd #minio
      모요
      S3 #MinIO #미니오 #설치 #맥 #MinIO Browser
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.0
    infe91
    [JPA] JPA Auditing
    상단으로

    티스토리툴바