개인 프로젝트 초기 설계를 진행하면서 테이블 생성 및 연관관계 매핑 중에 있다.
실무에서는 등록일/수정일 그리고 등록자아이디 혹은 등록자아이피,
수정자아이디 혹은 수정자아이피가 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<>();
}