250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 데코레이터
- 즉시로딩
- 연관관계
- execute
- 낙관적락
- 일대다
- 힙
- SQL프로그래밍
- BOJ
- 비관적락
- querydsl
- 백트래킹
- shared lock
- PS
- 다대일
- eager
- 스프링 폼
- 유니크제약조건
- fetch
- JPQL
- 지연로딩
- FetchType
- 동적sql
- 이진탐색
- 연결리스트
- CHECK OPTION
- dfs
- 다대다
- exclusive lock
- 스토어드 프로시저
Archives
- Today
- Total
흰 스타렉스에서 내가 내리지
@MappedSuperclass 본문
728x90
# 언제 사용하라고?
- 부모 클래스는 테이블과 매핑하지 않고, 부모 클래스를 상속 받는 자식 클래스에게 매핑 정보만 제공하고 싶을 떄
# 비유를 하자면..
- 추상 클래스와 비슷하다
- @Entity 는 실제 테이블과 매핑되지만, @MappedSuperclass 는 실제 테이블과는 매핑되지 않는다.
- 단순히 매핑 정보를 상속할 목적으로만 사용된다.
- Member 와 Seller 는 서로 관계가 없는 테이블과 엔티티다.
- 테이블은 그대로 두고 객체 모델의 id, name 두 공통 속성을 부모 클래스로 모으고 객체 상속 관계로 만들어보자
@MappedSuperclass
public abstract class BaseEntity {
@Id @GeneratedValue
private Long id;
private String name;
}
@Entity
public class Member extends BaseEntity{
private String email;
}
@Entity
public class Seller extends BaseEntity{
private String shopName;
}
- BaseEntity 에는 객체들이 주로 사용하는 공통 매핑 정보를 정의한다.
- 그리고 자식 엔티티들은 상속을 통해 BaseEntity 의 매핑 정보를 물려받았다.
- BaseEntity 는 테이블과 매핑할 필요가 없고 자식 엔티티에게 공통으로 사용되는 매핑 정보만 제공하면 된다. 따라서 @MappedSuperclass 를 사용했다.
# 부모의 매핑 정보를 재정의 하고 싶다
- @AttributeOverride 나 @AttributeOverrides 사용
@Entity
@AttributeOverride(name = "id", column = @Column(name = "MEMBER_ID"))
public class Member extends BaseEntity{
private String email;
}
@Entity
@AttributeOverrides({
@AttributeOverride(name = "id", column = @Column(name = "MEMBER_ID")),
@AttributeOverride(name = "name", column = @Column(name = "MEMBER_NAME"))
})
public class Member extends BaseEntity{
private String email;
}
- 부모에게 상속받은 id 속성의 컬럼명을 MEMBER_ID 로 재정의 했다.
- 둘 이상을 재정의 하려면 @AttributeOverrides 를 사용하면 된다.
# @MappedSuperclass 의 특징
- 테이블과 매핑되지 않고 자식 클래스에 엔티티의 매핑 정보를 상속하기 위해 사용한다.
- @MappedSuperclass 로 지정한 클래스는 엔티티가 아니므로 em.find() 나 JPQL 에서 사용할 수 없다.
# @MappedSuperclass 를 사용하면 등록일자, 수정일자, 등록자, 수정자 같은 여러 엔티티에서 공통으로 사용하는 속성을 효과적으로 관리할 수 있다.
'JPA' 카테고리의 다른 글
복합 키 : 비식별 관계 매핑 (1) | 2024.04.04 |
---|---|
식별 관계 vs 비식별 관계 (0) | 2024.04.04 |
연관관계 편의 메소드 (0) | 2024.04.02 |
필드와 컬럼 매핑 : 레퍼런스 (0) | 2024.04.01 |
유니크 제약조건 - uniqueConstraints (0) | 2024.04.01 |