상속 구조 맵핑

A collection of 7 posts

상속 구조 맵핑

상속 맵핑 전략 선택하기

맵핑 전략 다형적인 관계나 쿼리가 필요하지 ㅇ낳다면, Table Per Concrete Class를 사용하라. 즉, 상위 타입으로 객체들을 가져다 쓰지 않을거라면… 다형적인 관계나 쿼리가 필요하고, 하위 클래스들의 속성이 몇 개 되지 않는 다면, Table Per Class Hierarchy를 사용하라. 다형적인 관계나 쿼리가 필요하고, 하위 클래스들에 속성들이

상속 구조 맵핑

상속 맵핑 전략 혼용하기

특징 특정 하위 클래스에 대한 맵핑 정랸글 변경할 수 있다. 하이버네이트가 2차 테이블에서 속성들을 가져오도록 설정한다. 맵핑하기 기본으로 Table Per Class Hierachy를 사용하고 특정 하위 클래스만 Table Per Sub Class 사용하기. @SecondaryTable 애노테이션 사용하기. 2차 테이블에는 모든 속성을 명시해 주어야 한다.

상속 구조 맵핑

Table per subclass

특징 영속화 할 필드를 가진 모든 클래스의 테이블을 만든다. 상위 클래스의 주키를 하위 클래스의 주키이자 외례키로 사용한다. Join을 사용해서 상위 타입으로 하위 타입의 객체를 가져올 수 있다. 장점 정규화를 할 수 있다. 스키마 개선과 무결성 제약 정의가 간단하다. 다형성은 특정 하위 클래스로의 외례키 참조로

상속 구조 맵핑

Table per class hierarchy

특징 전체 상속 구조 하나를 단일 클래스로 맵핑한다. 하위 클래스의 객체들은 타입 구분자 Type Discriminator 컬럼의 값으로 구분한다. 구분자를 추가할 수 없는 상황에서는 formula를 사용한다. SQL의 CASE/WHERN 장점 다형적이거나 그렇지 않은 쿼리를 수행하는 성능이 좋다. <- 조인이나 Union을 하지 않으니까. 구현하기도 간편하다.

상속 구조 맵핑

Table per concrete class

특징 상위 클래스에 하위 클래스들을 Union으로 포함하여 가지고 있게 설정한다. JPA에서 TABLE_PER_CLASS는 필수 구현사항이 아니다. 따라서 밴더마다 다를 수 있다. Hibernate의 polymorphic loader engine이 쿼리의 성능 걱정을 덜어 줄 것이다. 하위 클래스들이 상위 클래스에 정의한 하나의 주키를 공유한다. 주키 생성 타입을 identity로

hibernate

Table per connrete class with implicit polymorphism

특징 모든 구현 클래스 하나 당 하나의 테이블로 표현한다. 상속 받은 속성들도 테이블의 컬럼으로 맵핑한다. 문제점 다형적인 관계를 잘 지원하지 못해. 왜? 상위 클래스와 관계를 맺고 있는 클래스가 하위 클래스를 참조해야 한다면, 이 클래스가 가져야 할 하위 클래스의 외례키는 두 개의 하위 클래스 모두의

You've successfully subscribed to Whiteship!
Could not sign up! Invalid sign up link.