Spring/JPA

JPA - MappedSuperClass

공부하고 기억하는 공간 2023. 12. 10. 03:32
728x90
반응형
SMALL

 

 

@MappedSuperclass란?
  • 객체의 입장에서 공통 매핑 정보가 필요할 때 사용
  • 예를 들어 공통으로 작성일, 작성자, 수정일, 수정자를 공통으로 집어넣고 싶을때 사용한다.
  • 공통 매핑 정보가 필요할 떄 부모 클래스에 선언하고 속성만 상속받아서 사용하고 싶을 때 사용한다.
    객체에 적용하기
    
    import lombok.Data;
    
    import javax.persistence.MappedSuperclass;
    import java.time.LocalDate;
    import java.time.LocalDateTime;
    
    @Data
    @MappedSuperclass
    public abstract class BaseEntity {
    
        /**
         * 작성자 및 작성일
         */
        private String createdBy;
        private LocalDateTime createdDate;
    
        /**
         * 수정자 와 수정일
         */
        private String lastModifedBy;
        private LocalDateTime lastModifedDate;
    
    
    }

    @Entity
    @Data
    @NoArgsConstructor(access = AccessLevel.PROTECTED)//기본생성자 protected
    @ToString(of = {"id","username","age"})
    public class Member extends BaseEntity {
    
        @Id
        @GeneratedValue
        @Column(name = "member_id")
        private Long id;
    
        private String username;
        private int age;
    
        @ManyToOne(fetch = LAZY)
        @JoinColumn(name = "team_id")
        Team team;
  •  
  • Member객체에 적용하기
  • BaseEntity( 공통 적용 값)
  •  

정리

  • 상속관계 매핑이 아니다
  • MappedSuperClass를 선언하면 엔티티가 아니며, 테이블과도 매핑되지 않는다.
  • 단순히 부모 클래스를 상속받는 자식 클래스에 매핑 정보만 제공된다
  • 부모 타입으로 조회가 불가능하다.
  • 직접 생성할 일이 없으므로 추상 클래스로 만드는 것을 권장
  • JPA에서 Entity는 Entity나 MappedSuperclass로 지정한 클래스만 상속받을 수 있다.

 

 

728x90
반응형
SMALL