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;
}

 

 

결과

 

 

공통추상클래스는 테이블로 생성되지 않고 그저 컬럼매핑정보만 자식클래스에게 넘겨주었다. 자식클래스는 넘겨받은 매핑정보대로 공통컬럼을 생성할 수 있게 된다. 

 

 


 

 

참고자료

 

자바 ORM 표준 JPA 프로그래밍 - 기본편 - 인프런 | 강의

JPA를 처음 접하거나, 실무에서 JPA를 사용하지만 기본 이론이 부족하신 분들이 JPA의 기본 이론을 탄탄하게 학습해서 초보자도 실무에서 자신있게 JPA를 사용할 수 있습니다., - 강의 소개 | 인프런

www.inflearn.com

 

반응형