Spring/Spring Boot

[Spring] 04. 데이터베이스 생성, 수정시간 자동 생성 클래스 만들기 (Timestamped 상속 테이블)

민돌v 2021. 11. 10. 13:08

전 게시물에서는 Lecture 클래스를 만들어 

@Entity // 테이블임을 나타냅니다.

Entitiy어노테이션으로 도메인, 테이블로 만들고, JpaRepositpory를 인터페이스로 상속받아 데이터를 관리할 수 있는 구조를 만들어보았다.

 

이번에는, 또 다른 클래스 테이블을 만들어, 이걸 Lecture 클래스에서 상속받아, 데이터베이스 테이블에 칼럼을 추가해보자


 

이번에 만들 클래스는, TimeStamped - 시간 기록 테이블이다.

데이터베이스를 만들 때, 생성 시간과 수정 시간을 기록할 수 있는 컬럼을 포함하는 테이블이다.

 👉 DB 기본 중의 기본은, "생성일자"와 "수정일자"를 필드로 가지는 것입니다.

 

라고한다.

 

이건, 모든 테이블에 필요할 수 있으므로, 클래스를 따로 만들어(한번만 만들어) 다른 클래스에서 상속받아, 코드의 중복성을 줄여보자

 

 


 

1. 클래스 만들기

Lecture 클래스와 마찬가지로 테이블이기에 Domain 패키지 안에서 관리해준다.

 

Timestamped.class 생성

@MappedSuperclass // 상속했을 때, 컬럼으로 인식하게 합니다.
@EntityListeners(AuditingEntityListener.class) // 생성/수정 시간을 자동으로 반영하도록 설정
public class Timestamped {

    @CreatedDate // 생성일자임을 나타냅니다.
    private LocalDateTime createdAt;

    @LastModifiedDate // 마지막 수정일자임을 나타냅니다.
    private LocalDateTime modifiedAt;
}

 

[어노테이션 살표보기]

어노테이션 느무느무 어려운거,,, 하나씩 알아가 보자

1) @MappedSuperclass 어노테이션

- 간단하게, 공통 필드를 가지고있는 부모 클래스

- Entity가 아닌, 상속을 위한 부모 테이블

- 그렇기에 접근 불가능

 

2) @EntityListeners(AuditingEntityListener.class) 어노테이션

- 해당 클래스에 Auditing 기능을 추가하는 것

- 엔티티 클래스에 붙여준다.

 

JPA Auditing

Spring Data JPA에서 자동으로 값을 넣어주는 기능

엔티티에 중복으로 들어가는 값들을 @MappedSuperclass인 상위 클래스를 만들어 주고 Auditing 기능을 이용해서 값을 자동으로 추가해준다.

 

 

2. 클래스 상속

Lecture 클래스에 Timestamped 클래스를 extends 로 상속 시킨다.

이러면 Lecture 테이블에 Timestamped 컬럼을 사용할 수 있는 준비를 마친거다.

 

class Lecture extends Timestamped {

 

 

2. Spring 어플리케이션에 Jpa Auditing 추가

@EnableJpaAuditing
@SpringBootApplication
public class Item01Application {

@EnableJpaAuditing

스프링 Auditing 기능을 추가하기 위해 붙인다.

@SpringBootApplication에 해당되는 클래스에 붙인다.

 

 

이렇게해서 TimeStamped 클래스를 상속받은 자식 테이블들은, 공통적인 컬럼을 각각 명시할 필요없이 받아와서 사용할 수 있다.

 

예시