Tagged

상속 구조 맵핑

A collection of 7 posts

상속 구조 맵핑

Hibernate Core VS JPA

Hibernate JPA 네 가지 상속 맵핑 전략을 제공하고, 상속 전략을 혼용하는 것이 가능하다. 네 가지 맵핑 전략을 표준화 했다. 이 중에선 Table Per Class Hierarchy와 Table Per Subclass만 JPA 호환 필수요소다. 영속성 대상이 되는 클래스의 상위 클래스는 abstract class나 interface도 될 수 있다. abstract class만 이식 가능하다. Value Type을 위한

상속 구조 맵핑

상속 맵핑 전략 선택하기

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

상속 구조 맵핑

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로 하면 안 된다. AUTO로 설정했을 때

hibernate

Table per connrete class with implicit polymorphism

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