티스토리 뷰
728x90
반응형
해당 이미지를 보게 되면 객체 ORM 과 테이블은 유사한 관계를 가지고 있다.
단일 테이블 형태와 비슷하게 객체는 Item을 부모 클래스를 가지고 자식 클래스로 Album,Movie,Book 이 있다.
테이블을 보게되면 단일 테이블 같은 경우 Item이라는 테이블 안에 Album,Movie,Book 내용이 다들어간다.
하지만 조인 전략같은 경우 테이블이 세분화 되어있으며 해당 item의 PK 값을 각각의 자식 테이블들이 FK 값을 가지게 된다.
사용 어노테이션
- @Inheritance(strategy=InheritanceType.JOIN)
- @DiscriminatorColumn(name=””)
- @DiscriminatorValue(””);
예제 확인@Entity @Inheritance(strategy = InheritanceType.JOINED) @DiscriminatorColumn //JOINED 사용시 선언하는 것이 좋음 public class Item {
@DIscriminatorColumn 선언과 비선언 차이 결과
→ 비선언인 경우
→ 선언하였을 경우
@DiscriminatorColumn default 값 변경
@Entity @Inheritance(strategy = InheritanceType.JOINED) @DiscriminatorColumn(name="gubun") public class Item {
결과: DTYPE ⇒ GUBUN 컬럼 변경됨
조인 전략의 객체 상속 관계 예제
부모클래스 : Item, 자식 클래스 : Movie
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
@DiscriminatorColumn
public class Item { //부모클래스
@Id
@GeneratedValue
private Long id;
private String name;
private int price;
}
@Entity
public class Movie extends Item{ //자식클래스
private String director;
private String actor;
}
@DiscriminatorValue 사용법
비선언 시 : default 값 Movie로 하여 Item의 컬럼 DTYPE에 들어감
선언 시 : 선언된 명에 해당하는 값으로 들어감
@Entity
@DiscriminatorValue("MMM") // 여기 선언함~
public class Movie extends Item{
조인 전략일 경우 값 등록 처리 쿼리
Movie movie = new Movie();
movie.setDirector("test2");
movie.setActor("bbb2");
movie.setName("바람과 함께 사라지다");
movie.setPrice(10000);
entityManager.persist(movie);
Movie 클래스에 값을 넣고 등록 할 경우 결과는?????
결과 : item 과 movie에 각각 저장되는 것을 확인 가능
테이블 등록된 결과
조인 전략처리시 select 할 경우의 쿼리
Movie findMovie = entityManager.find(Movie.class, movie.getId());
System.out.println(findMovie);
쿼리: movie에 item을 조인하여 들고 오게 된다.
조인 전략의 장점 과 단점
- 장점
- 테이블 정규화
- 외래 키 참조 무결성 제약조건 활용가능
- 저장공간 효율화
- 단점
- 조회시 조인을 많이 사용, 성능 저하
- 조회 쿼리가 복잡함
- 데이터 저장시 INSERT SQL 2번 호출
728x90
반응형
'프로그램 언어 > Spring JPA' 카테고리의 다른 글
PROXY(프록시) (0) | 2023.04.28 |
---|---|
@MappedSuperclass(공통 속성 매핑) (0) | 2023.04.27 |
SPRING JPA 상속관계(단일 테이블 전략) (0) | 2023.04.26 |
양방향 연관관계 , 연관관계의 주인 (0) | 2023.04.26 |
테이블 지향 모델링 vs 객체 지향 모델링 (0) | 2023.04.26 |
250x250
반응형
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- spring
- Java
- hazelcast
- centos7
- MySQL
- 알고리즘
- insert
- 개념 이해하기
- Cache
- 스케줄러
- 캘린더
- 네이버 클라우드
- dfs
- ncp
- mybatis
- leatcode
- LocalDate
- Quartz
- 리눅스
- 정의
- dockerfile
- 도커
- 격리수준
- 권한
- docker
- Linux
- Lock
- 이미지
- 컨테이너
- 캐시
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함