JPA 공통 컬럼 상속 (BaseEntity)

Woolly·2023년 5월 26일
0

개인 프로젝트 초기 설계를 진행하면서 테이블 생성 및 연관관계 매핑 중에 있다.
실무에서는 등록일/수정일 그리고 등록자아이디 혹은 등록자아이피,
수정자아이디 혹은 수정자아이피가 DB에 공통으로 설계가 되기 때문에
이렇게 모든 테이블에 들어가야 할 공통 컬럼을 따로 클래스로 빼고,
상속을 통해 모든 Entity 클래스에서 소유할 수 있도록 수정하였다.

먼저 domain 패키지에 BaseEntity 클래스를 생성한 뒤
차례대로 등록자, 등록일자, 수정자, 수정일자 컬럼을 변수로 선언했다.

그리고 @MappedSuperclass 어노테이션을 통해 공통 Entity를 선언하고,
이후에 다른 도메인 엔티티 클래스들은 이를 상속 받아 사용할 수 있다.

BaseEntity 클래스

package com.dorandoran.domain;

import lombok.Getter;
import org.springframework.data.annotation.CreatedBy;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedBy;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;

import javax.persistence.Column;
import javax.persistence.EntityListeners;
import javax.persistence.MappedSuperclass;
import java.time.LocalDateTime;

@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
@Getter
public class BaseEntity {

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

    @CreatedDate
    private LocalDateTime createdDate;

    @LastModifiedBy
    private String updated;

    @LastModifiedDate
    private LocalDateTime updatedDate;
}

Member 클래스

package com.dorandoran.domain;

import lombok.Getter;
import lombok.Setter;

import javax.persistence.*;
import java.util.ArrayList;
import java.util.List;

@Entity
@Getter @Setter
public class Member extends BaseEntity {

    @Id @GeneratedValue
    @Column(name = "member_id")
    private Long id;

    private String name;
    private String nickname;
    private String email;
    private String password;

    // Member<->Board
    @OneToMany(mappedBy = "member")
    private List<Board> board = new ArrayList<>();

    // Member<->Comment
    @OneToMany(mappedBy = "member")
    private List<Comment> comment = new ArrayList<>();
}
profile
Ad Astra

0개의 댓글