전 게시물에서는 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 클래스를 상속받은 자식 테이블들은, 공통적인 컬럼을 각각 명시할 필요없이 받아와서 사용할 수 있다.
'Spring > Spring Boot' 카테고리의 다른 글
[Spring] 06. Lombok - getter, Setter, 기본타입 생성자 코드 중복 없애기 (0) | 2021.11.11 |
---|---|
[Spring] 05. JPA - CRUD (Spring Service layer) (0) | 2021.11.11 |
[Spring] 03. Spring H2 데이터베이스 연동하기 (Repository 레이어, JPA) (0) | 2021.11.04 |
[Spring Boot] 02. Java에서 어노테이션(Annotation) 이란? (미완) (0) | 2021.11.04 |
[IntelliJ] 01. Spring 부트 프로젝트 세팅하기 (0) | 2021.11.04 |