반응형
많은 엔티티가 공통으로 사용하는 속성이 있다.
수정일자, 등록일자, 수정자 같은 속성은 거의 모든 엔티티가 사용한다. 그러므로 공통으로 사용하는 속성을 중복으로 코딩하면 개발자가 효율이 떨어진다. 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;
}
결과
공통추상클래스는 테이블로 생성되지 않고 그저 컬럼매핑정보만 자식클래스에게 넘겨주었다. 자식클래스는 넘겨받은 매핑정보대로 공통컬럼을 생성할 수 있게 된다.
참고자료
반응형
'JPA > JPA Basic' 카테고리의 다른 글
[JPA] 지연로딩(Lazy Loading)을 사용해야 하는 이유 (0) | 2023.06.08 |
---|---|
[JPA] 프록시( Proxy ) (0) | 2023.06.08 |
[JPA] 상속관계 매핑 - JOIN전략, SINGLE_TABLE전략 (0) | 2023.06.07 |
[JPA] 연관관계 매핑 - 다대다 ( @ManyToMany ) (0) | 2023.06.07 |
[JPA] 연관관계 매핑 - 일대일 ( @OneToOne ) (4) | 2023.06.06 |