티스토리 뷰
모듈화 방식 : jpa가 봤을 때는 1,2번 차이가 없어야 한다. db에서는 하나의 테이블의 동일한 컬럼일 뿐.
1. 임베디드
DB는 변하는 것이 없고
java에서 편하게 쓰는 것일 뿐임.
@Embeddable : 선언할 때, 나 추가될 수 있어
@Embedded : 모듈을 사용할 때, 나 추가됐어
상속이 아니다. 필드(객체)를 모듈화한 것임. 분리한 것임. 다른 곳에서도 재사용할 수 있음.
임베디드 : 기존에 있는 것에서 새로운 것을 추가하는 것임.
필드 하나하나를 접근해서 쓰지 않고, 묶어서 통채로 가져올 때 사용한다.
2. MappedSuperclass
Inheritance : 상속관계, RDB에서도 상속관계 @Entity 사용
period : 부모x, 재사용하기 위함. 임베디드와 비슷한 성격.
상속관계가 아니라고 jpa에 알려줌. db도 상속으로 받아들이면 안됨. >> 이 때 @MappedSuperclass 사용
동일한 필드를 반복해서 사용하기 위해서 extends를 해줌.
@Entity 사용X
객체지향쪽에서는 상속관계지만 임베디드를 안 쓰기 위해서 이런 방식을 사용함.
단독으로 사용불가 > abstract 추가
@MappedSuperclass
필드를 extends로 공유할 수 있음.
객체진영에서만 상속관계
RDB진영에서 상속관계X, 마치 하나의 테이블인 것으로 인식함.
jpa가 상속인지 모름. 매핑이 안됨.
join이 나가면 안됨. 테이블만 조회하면 period까지 같이 조회가 됨.
단독으로 사용안되고, 자식객체를 통해서 들어감. > 추상클래스로 한다.
임베디드와 맵드의 차이점
1.임베디드는 2번 접근해야 함. -> 사용할 때 불편하다. 복잡성
2.맵드슈퍼클래스는 상속받아서 내 필드로 접근하면 되기 때문에 편리하다.
추상클래스니까 상속받은 자식에서만 접근을 해야 한다.
자바진영에서는 상속받았으니까 부모에 바로 접근가능함. -> 간편함.
=> 자주 접근하는 거면 맵드슈퍼클래스로 모듈화를 하면 되고,
자주 접근하지 않고 내용물이 많아, 하나하나 따져가면서 써야하면 임베디드를 사용한다.
필드 전체를 묶음으로 다 가져와서 사용할 때는 임베디드로 쓰기.
설계 방식 | 어노테이션 |
상속 | Inheritance entity |
임베디드 | embeddable embedded (extends X) |
맵드 | MappedSuperclass extends > 그렇지만 jpa한테 상속관계가 아님을 알려줘야 함. |
'2022 > jpa' 카테고리의 다른 글
day04[연관관계] (0) | 2022.11.30 |
---|---|
day04[Auditing(어디팅)] (0) | 2022.11.30 |
day03[상속] (0) | 2022.11.30 |
day03[JPA new project] (0) | 2022.11.30 |
day03[벌크 연산, Repository, 쿼리메소드] (0) | 2022.11.30 |