본문 바로가기

Spring/JPA

JPA- @MappedSuperClass

@MappedSuperClass

package hellojpa;

import javax.persistence.MappedSuperclass;
import java.time.LocalDateTime;

@MappedSuperclass
// 이 클래스를 상속받는 엔티티들은 공통적으로 이 클래스의 필드를 상속받지만,
// 따로 이 클래스에 대한 테이블이 만들어지진 않는다.
public class abstract BaseEntity {

    private String createdBy;
    private LocalDateTime createdDate;
    private String modifiedBy;
    private LocalDateTime modifiedDate;

    // Getter, Setter
    public String getCreatedBy() {
        return createdBy;
    }

    public void setCreatedBy(String createdBy) {
        this.createdBy = createdBy;
    }

    public LocalDateTime getCreatedDate() {
        return createdDate;
    }

    public void setCreatedDate(LocalDateTime createdDate) {
        this.createdDate = createdDate;
    }

    public String getModifiedBy() {
        return modifiedBy;
    }

    public void setModifiedBy(String modifiedBy) {
        this.modifiedBy = modifiedBy;
    }

    public LocalDateTime getModifiedDate() {
        return modifiedDate;
    }

    public void setModifiedDate(LocalDateTime modifiedDate) {
        this.modifiedDate = modifiedDate;
    }
}

 @MappedSuperClass를 선언한 클래스는 테이블로 만들지 않고 공통적으로 속성만 상속하겠다는 의미이기 때문에  @Entity 선언 시 오류가 발생한다. 

 

BaseEntity를 상속받은 Member.class

@Entity
public class Member extends BaseEntity {

    @Id @GeneratedValue
    @Column(name = "MEMBER_ID")
    private Long id;

    @Column(name = "USERNAME", nullable = false)
    private String userName;

    @ManyToOne
    @JoinColumn(name = "TEAM_ID")
    private Team team;

    @OneToOne
    @JoinColumn(name = "LOCKER_ID")
    private Locker locker;

    @OneToMany(mappedBy = "member")
    List<MemberProduct> memberProducts = new ArrayList<>();
}

BaseEntity를 상속받은 Team.class

@Entity
public class Team extends BaseEntity{

    @Id @GeneratedValue
    @Column(name = "TEAM_ID")
    private Long id;
    private String name;

    @OneToMany 
    @JoinColumn(name = "TEAM_ID")
    private List<Member> members = new ArrayList<>();
}

Member와 Team이 BaseEntity의 필드를 상속 받았지만 BASEENTITY 테이블은 생성되지 않았음

 

정리

'Spring > JPA' 카테고리의 다른 글

JPA- 즉시 로딩, 지연 로딩  (0) 2023.03.16
JPA- 프록시  (0) 2023.03.16
JPA- 상속관계 매핑  (0) 2023.03.12
JPA- 다대일, 일대일  (0) 2023.03.08
JPA- 연관관계 매핑 주의점  (0) 2023.03.05