JPA/JPA Basic
[JPA] 공통속성 처리하기 - @MappedSuperclass
IT록흐
2023. 6. 7. 19:23
반응형
많은 엔티티가 공통으로 사용하는 속성이 있다.
수정일자, 등록일자, 수정자 같은 속성은 거의 모든 엔티티가 사용한다. 그러므로 공통으로 사용하는 속성을 중복으로 코딩하면 개발자가 효율이 떨어진다. JPA는 @MappendSuperclass 어노테이션을 지원하여 공통속성을 중복없이 처리한다.
엔티티는 공통속성을 가진 클래스를 상속한다. '상속'으로 구현했지만 '컬럼'이 필요할 뿐, 부모의 역할을 원하는 것이 아니다. 그러므로 BasicColumn은 엔티티가 아닌 추상클래스로 선언한다. 그리고 @MappedSuperclass 어노테이션으로 표시를 한다. JPA는 엔티티가 아닌 추상클래스이므로 테이블을 생성하지 않는다. @MappedSuperclass 어노테이션으로 표시되었음으로 클래스를 상속한 엔티티는 공통클래스의 필드를 컬럼으로 만들 수 있다.
BasicColumn 클래스
@MappedSuperclass
@Data
public abstract class BasicColumn {
private LocalDateTime regDate;
private LocalDateTime modDate;
private String modifier;
}
Professor 클래스
@Entity
@Data
public class Professor extends BasicColumn{
@Id @GeneratedValue
@Column(name = "PROFESSOR_ID")
private Long id;
private String name;
}
Student 클래스
@Entity
@Data
public class Student extends BasicColumn {
@Id @GeneratedValue
@Column( name = "STUDENT_ID")
private Long id;
private String name;
}
결과
공통추상클래스는 테이블로 생성되지 않고 그저 컬럼매핑정보만 자식클래스에게 넘겨주었다. 자식클래스는 넘겨받은 매핑정보대로 공통컬럼을 생성할 수 있게 된다.
참고자료
반응형