티스토리 뷰

모듈화 방식 : 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
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/11   »
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
글 보관함