서론
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가 가지고 있는 필드값들도 같이 공통 컬럼이 생성됩니다.