@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<>();
}
정리
'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 |