JPA 상속으로 공통 컬럼 만들기

작성자 : 조회수 :

 

서론

 

JPA 를 사용하면서 공통 컬럼들 요소들을 하나씩 매번 만들기 귀찮아서 찾은 방법 입니다.

거의 모든 테이블들은 insertDate, updateDate 등을 가지고 있어 공통으로 묶어두면 유지보수 하기도 편할 것 같아 아래처럼 해결하였습니다.

 

본론

 

예시코드입니다.

 

 

@SuperBuilder

@AllArgsConstructor

@NoArgsConstructor

@Getter

@Entity

public class ServiceTable extends InsertUpdateData{

    @Id

    @GeneratedValue(strategy = GenerationType.IDENTITY)

    private int serviceId;

    @Column(unique = true, nullable = false)

    private String serviceName;

    private String serviceUri;

    private String remarks;

    private Boolean isDeleted;

   

}

 

이런 엔티티 코드가 있을 때

 

@SuperBuilder

@AllArgsConstructor

@NoArgsConstructor

@Getter

@MappedSuperclass

public class InsertUpdateData {

    @CreationTimestamp

    private Timestamp createDate;

    private Long createUser;

    @UpdateTimestamp

    private Timestamp updateDate;

    private Long updateUser;

    private Boolean isDeleted;

}

 

이렇게 공통 적인 것들은 부모 클래스로 두어서

 

필요할때마다 상속시켜서 모든 테이블에 공통 컬럼을 만들어 둘 수가 있습니다.

 

 

여기서 SuperBuilder 는 일반 builder 패턴에서 상속받은 클래스는 상위 클래스에게 builder 패턴이 적용되지않아 그것을 해결위한 어노테이션 이며

 

 

@MappedSuperClass가 핵심 어노테이션입니다 해당 어노테이션이 달리면 상속 받는 자식 클래스들도 super class가 가지고 있는 필드값들도 같이 공통 컬럼이 생성됩니다.