Skip to content

JPA 를 사용해서 엔티티 관계를 설정할 때 공통 필드가 있다면?

her0807 edited this page Jun 27, 2021 · 1 revision

엔티티 설계

서비스를 운영할 때보면 회원 생성 시간, 수정 시간, 게시글 생성 시간, 수정 시간 처럼
테이블에 공통 필드가 존재하는 경우가 있다. 그럴 때는 `Base Entity' 를 만들어서 다른 엔티티 클래스에서
상속 받아서 구현하자!


상속을 구현하기 위해서 필요한 어노테이션 들이 있다.

@MappedSuperclass

베이스 엔티티 클레스에 이 어노테이션을 붙이면

  1. 상속 받은 클래스에 베이스 엔티티 필드가 칼럼으로 생성된다.
@EntityListeners(AuditingEntityListener.class)
@MappedSuperclass
public class BaseEntity {
    @CreatedDate
    private LocalDateTime create;

    @LastModifiedDate
    private LocalDateTime updated;

}

예시 아래와 같은 post 테이블이 생성 될 때 칼럼이 총 3개가 되는 것이다.

public class Posts extends BaseEntity{

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

@EntityListeners(AuditingEntityListener.class) 은?

변경되는 시점, 생성 시점의 시간을 기록해야 할 일이 있다. audit(감사,회계)의미처럼 이 클래스를 사용하면
Auditing 기능으로 인해서 트랜잭션 커밋 시점에 플러시가 호출할 때 하이버네이트가 자동으로
시간 값을 채워주는것을 확인 할 수 있다. 이걸 사용할 때는

스프링 부트의 Entry 포인트인 실행 클래스에 @EnableJpaAuditing
어노테이션을 적용하여 JPA Auditing을 활성화 해야하는 것을 잊지 말아야 합니다.

AuditingEntityListener

Clone this wiki locally