@MappedSuperclass는 공통으로 사용하는 매핑정보가 있을 때 사용한다.
즉 Member나 Team 테이블이 createdBy, createDate 같은 속성들을 공통적으로 가질 때 사용한다.
뭔가 상속관계 매핑같지만 다른 것이다.
@MappedSuperclass가 적용된 class의 특징을 보면
사용법은 단순히 공통된 특성을 같는 클래스를 만들어 어노테이션만 추가하면 된다.
import javax.persistence.MappedSuperclass;
import java.time.LocalDateTime;
@MappedSuperclass
public abstract class BaseEntity {
private String createBy;
private LocalDateTime createdDate;
private String lastModifiedBy;
private LocalDateTime lastModifiedDate;
public String getCreateBy() {
return createBy;
}
public void setCreateBy(String createBy) {
this.createBy = createBy;
}
// .. 이하 getter setter
}
그리고 Team과 Member에서 상속 받는다.
import javax.persistence.*;
import java.util.ArrayList;
import java.util.List;
@Entity
public class Team extends BaseEntity {
@Id @GeneratedValue
@Column(name = "TEAM_ID")
private Long id;
private String name;
@OneToMany(mappedBy = "team")
private List<Member> members = new ArrayList<>();
public List<Member> getMembers() {
return members;
}
public void setMembers(List<Member> members) {
this.members = members;
}
// ... 이하 getter setter
}
import javax.persistence.*;
import java.util.ArrayList;
import java.util.List;
@Entity
public class Member extends BaseEntity {
@Id @GeneratedValue
@Column(name = "MEMBER_ID")
private Long id;
@Column(name = "USERNAME")
private String username;
@OneToOne
@JoinColumn(name = "LOCKER_ID")
private Locker locker;
@ManyToOne
@JoinColumn(name = "TEAM_ID")
private Team team;
@ManyToMany
@JoinColumn(name = "MEMBER_PRODUCT")
private List<Product> products = new ArrayList<>();
public Locker getLocker() {
return locker;
}
public void setLocker(Locker locker) {
this.locker = locker;
}
// ... 이하 getter setter
}
결과를 보면
필요한 속성들이 생성된 것을 볼 수 있다.
[ JPA ] 지연로딩과 즉시로딩 (0) | 2022.01.20 |
---|---|
[ JPA ] 프록시와 getReference() (0) | 2022.01.17 |
[ JPA ] 상속관계 매핑 (0) | 2022.01.15 |
[ JPA ] persist 와 id값 (0) | 2022.01.09 |
[ JPA ] 양방향 연관관계(2) - 주의할 점 (0) | 2022.01.08 |