@MappedSuperclass를 사용해서 BaseEntity 만들기

seojun·2023년 5월 12일
0

BaseEntity는 entity를 만들 때 중복되는 값들이 있으면 사용한다. 대표적인 것으로는 createDate, updateDate 등이 있다.

@MappedSuperclass 사용법

BaseEntity

@Getter
@MappedSuperclass
public abstract class BaseEntity {

    @Column(updatable = false)
    @CreatedDate
    private LocalDateTime createDate;

    @LastModifiedDate
    private LocalDateTime updateDate;

    private LocalDateTime deleteDate;
}

@Column(updatable = false)

sql update문에 해당 컬럼을 포함하지 않는다는 것이다.

@CreatedDate

엔티티를 생성시 자동으로 생성일을 넣어주는 것이다.

@LastModifiedDate

해당 엔티티가 수정될 때 수정된 시간 정보를 자동으로 넣어주는 것이다.

Member

@Entity
@Getter
@Table(name = "member")
public class Member extends BaseEntity {

    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "member_nid")
    private Long nid;
    
    //... 중략 
    
    @Builder
    public Member(String id, String password, String name) {
        this.id = id;
        this.password = password;
        this.name = name;
    }
}

위와 같이 BaseEntity를 상속받아 사용할 수 있다.



BaseEntity에 Builder를 사용하고 싶다면?

@SuperBuilder를 사용하면 된다.

BaseEntity

@Getter
@MappedSuperclass
@SuperBuilder <- 추가
public abstract class BaseEntity {

    @Column(updatable = false)
    @CreatedDate
    private LocalDateTime createDate;

    @LastModifiedDate
    private LocalDateTime updateDate;

    private LocalDateTime deleteDate;
    
    // @Builder 
    public BaseEntity() {
    	// ... 중략
    }
}

Member

@Entity
@Getter
@Table(name = "member")
@SuperBuilder <- 추가
public class Member extends BaseEntity {

    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "member_nid")
    private Long nid;
    
    //... 중략 
    
    // @Builder
    public Member(String id, String password, String name) {
        this.id = id;
        this.password = password;
        this.name = name;
    }
}

이런 식으로 사용하면 된다.

0개의 댓글