JPA | @MappedSuperclass
👨💻 들어가기 앞서서
JPA 를 사용을 하다 보면 두가지 테이블에서 중복된 컬럼이 있고 추후에 중복이
될 수 있는 컬럼이 있을 수도 있다
그런 상황에서 사용을 하고자 이제는@MappedSuperclass
을 사용을 하여서
클린 코드를 작성을 해보기 위한 글이다.
어노테이션 사용 전 Mapping
어노테이션 사용 후 Mapping
@MappedSuperclass
JPA 를 Entity 를 만들다 보면 중복 적인 컬럼을 만들 때가 있다
중복적인 매핑을 피하고자@MappedSuperclass
를 사용을 한다.
@Getter
@MappedSuperclass
@EntityListeners(value = {AuditingEntityListener.class})
public abstract class BaseEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
protected Long id;
@Column(name = "create_date" , nullable = false , updatable = false)
protected LocalDate createDate;
@Column(name = "update_date" , nullable = false)
protected LocalDate updateDate;
@PrePersist
protected void onPersist() {
this.createDate = this.updateDate = LocalDate.now();
}
@PreUpdate
protected void onUpdate() {
this.updateDate = LocalDate.now();
}
}
id 의 경우 @GeneratedValue(strategy = GenerationType.IDENTITY) 로 설정시 시퀀스가 자동으로 증가한다.
createDate 의 경우 Row 데이터가 만들어질때 자동으로 들어간다
updateDate 의 경우 Row 데이터가 변경이될때 자동으로 들어간다
@PrePersist 의 경우 연속성관리하기 직전에 호출을 의미한다.
@PreUpdate 의 경우 flush , commit 시 호출 한다.
@Getter
@MappedSuperclass
@EntityListeners(value = {AuditingEntityListener.class})
public abstract class BoardBaseEntity extends BaseEntity{
@Column(name = "create_by" , updatable = false)
protected String createBy;
@Column(name = "update_by")
protected String updateBy;
}
아래와 같이
extends
를 사용을 하여서 BaseEntity 를 사용하면 클린하고 중복이 없는 코드를 작성 할 수 있을 것이다.
@Table(name="TEST")
@Entity
public class Test extends BaseEntity{
... 중략 ...
}
Author And Source
이 문제에 관하여(JPA | @MappedSuperclass), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@ewan/What-is-JPA-MappedSuperclass-편저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)