-
김영한님의 상속 관계매핑 강의정리공부/JPA 2022. 12. 31. 00:47
조인전략
Join전략 DB의 물리적 모델 Item을 상속받는 Album, Movie,Book 객체를 JPA에서 Join전략을 이용해 저장했을때 나타나는 DB의 물리적 모델이다.
상속받는 객체들은 부모객체의 PK를 PK,FK로 받아와서 DB를 설계한다.
예를 들어 Album table에 name과 price값을 넣어야 한다면 Item table에 Join을 해서 값을 넣게 된다.
Item table은 각각의 상속받은 객체를 DTYPE으로 구분한다.
부모객체인 Item에 @Inheritance(strategy = InheritanceType.JOINED)를 선언해줘서
상속 매핑 전략 JOIN을 사용한다고 선언해준다.
상속받은 객체들의 table 상태 물리적 모델의 그림처럼 상속받은 객체의 테이블에 부모객체의 item table에 pk인 item_id가 Column에 추가되었다.
/test 매핑을 받을경우 Join 전략의 DB 상태 Album을 생성하고 name, price, artist의 값을 넣어주고 album객체를 저장하면 name과 price는 item table에 들어가고
album table은 item table의 외래키와 Aritist 속성이 들어가있게 된다.
부모 클래스인 Item에 @DiscriminatorColumn으로 인해
상속받은 Table을 구분할수 있는 Dtype이 Item Table에 추가가 되었다.
단일 테이블 전략
자식 테이블을 하나의 테이블에 모두 넣은후 DTYPE으로 자식 테이블을 구분하는 전략이다.
Item 클래스와 Item table의 속성, 상속받은 객체의 속성들이 모두 item table에 들어와있다. Album 객체를 저장한 상태.
구현 클래스마다 테이블 생성 전략
부모 테이블을 없애버리고 부모 테이블의 속성을 모든 자식 테이블이 각각 가질수 있도록 만드는 전략이다.
각각의 자식 테이블에 모두 부모 테이블의 속성인 name, price가 들어가 있다. 김영한 선생님이 쓰지말라하는 전략.. 쓰지않도록 해야겠다.
@MappedSuperclass
공통 속성이 필요할때 사용한다. DB는 완전 서로 독립적인 상태가 된다.
상속관계와는 전혀상관 없다
package togethers.togethers.test; import javax.persistence.MappedSuperclass; import java.time.LocalDateTime; @MappedSuperclass public class BaseEntity { private String createby; private LocalDateTime createDate; private String LastModifiedby; private LocalDateTime lastModifiedDate; }
공통 속성을 담고 있는 BaseEntity 클래스
@MappedSuperClasee annotation을 추가해서 다른 Entity들이 이 클래스를 상속받으면
클래스의 속성들이 추가가 된다.
public class Member extends BaseEntity
Member Class가 BaseEntity를 상속받아서 BaseEntity의 속성이 DB에 추가 됬다. @MappedSuperclass가 들어간 Class는 단독으로 사용할일이 없기 때문에 추상 클래스로 선언하는 것을 권장한다.
'공부 > JPA' 카테고리의 다른 글
3월 17일 공부 값타입 컬렉션 (0) 2023.03.17 3월 14일 공부 (0) 2023.03.15 김영한님의 JPA프록시 강의 정리 (0) 2023.01.02 JPA annotation 정리 (0) 2022.12.22