BaseEntity는 entity를 만들 때 중복되는 값들이 있으면 사용한다. 대표적인 것으로는 createDate, updateDate 등이 있다.
@Getter
@MappedSuperclass
public abstract class BaseEntity {
@Column(updatable = false)
@CreatedDate
private LocalDateTime createDate;
@LastModifiedDate
private LocalDateTime updateDate;
private LocalDateTime deleteDate;
}
sql update문에 해당 컬럼을 포함하지 않는다는 것이다.
엔티티를 생성시 자동으로 생성일을 넣어주는 것이다.
해당 엔티티가 수정될 때 수정된 시간 정보를 자동으로 넣어주는 것이다.
@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를 상속받아 사용할 수 있다.
@SuperBuilder를 사용하면 된다.
@Getter
@MappedSuperclass
@SuperBuilder <- 추가
public abstract class BaseEntity {
@Column(updatable = false)
@CreatedDate
private LocalDateTime createDate;
@LastModifiedDate
private LocalDateTime updateDate;
private LocalDateTime deleteDate;
// @Builder
public BaseEntity(값) {
// ... 중략
}
}
@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;
}
}
이런 식으로 사용하면 된다.