Whiteship's Note

Table per subclass

Hibernate/Chapter 5 : 2008.02.01 21:39


특징

  • 영속화 할 필드를 가진 모든 클래스의 테이블을 만든다.
  • 상위 클래스의 주키를 하위 클래스의 주키이자 외례키로 사용한다.
  • Join을 사용해서 상위 타입으로 하위 타입의 객체를 가져올 수 있다.

장점

  • 정규화를 할 수 있다.
  • 스키마 개선과 무결성 제약 정의가 간단하다.
  • 다형성은 특정 하위 클래스로의 외례키 참조로 가능하다.
  • 구분자 컬럼 필요없다.

단점

  • 복잡한 클래스 구조에서는 성능이 안 좋을 수 있다.

맵핑하기

  • 상위 클래스
@Entity
@Table(name="BILLING_DETAIL")
@Inheritance(strategy = InheritanceType.JOINED)
public abstract class BillingDetails {
  • 하위 클래스
@Entity
public class CreditCard extends BillingDetails {

or

@Entity
@PrimaryKeyJoinColumn(name="CREDIIT_CARD_ID")
public class CreditCard extends BillingDetails {

쿼리 분석

  • 상위 타입으로 요청할 때는 left outter join
select billingdet0_.BILLING_DETAILS_ID as BILLING1_0_, billingdet0_.OWNER as OWNER0_, 
billingdet0_1_.ACCOUNT as ACCOUNT1_, billingdet0_2_.CC_NUMBER as CC2_2_,
case
when billingdet0_1_.BILLING_DETAILS_ID is not null then 1
when billingdet0_2_.BILLING_DETAILS_ID is not null then 2
when billingdet0_.BILLING_DETAILS_ID is not null then 0 end as clazz_
from BILLING_DETAIL billingdet0_
left outer join BankAccount billingdet0_1_ on
billingdet0_.BILLING_DETAILS_ID=billingdet0_1_.BILLING_DETAILS_ID
left outer join CreditCard billingdet0_2_ on
billingdet0_.BILLING_DETAILS_ID=billingdet0_2_.BILLING_DETAILS_ID
  • 하위 타입으로 요청할 때는 inner join.
select bankaccoun0_.BILLING_DETAILS_ID as BILLING1_0_, bankaccoun0_1_.OWNER as OWNER0_, 
bankaccoun0_.ACCOUNT as ACCOUNT1_
from BankAccount bankaccoun0_
inner join BILLING_DETAIL bankaccoun0_1_ on
bankaccoun0_.BILLING_DETAILS_ID=bankaccoun0_1_.BILLING_DETAILS_ID

'Hibernate > Chapter 5' 카테고리의 다른 글

CompositeUserType 만들기  (0) 2008.02.04
UserType만들기  (0) 2008.02.04
맵핑 타입 사용하기  (0) 2008.02.04
내장된 맵핑 타입  (0) 2008.02.04
Entity와 Value type 복습  (0) 2008.02.04
상속 맵핑 전략 선택하기  (0) 2008.02.01
상속 맵핑 전략 혼용하기  (0) 2008.02.01
Table per subclass  (0) 2008.02.01
Table per class hierarchy  (0) 2008.02.01
Table per concrete class  (0) 2008.02.01
Table per connrete class with implicit polymorphism  (0) 2008.02.01
top

Write a comment.




: 1 : ··· : 8 : 9 : 10 : 11 : 12 : 13 : 14 : 15 :