본문 바로가기

컴퓨터공학/Hibernate

Hibernate> Inheritance Mapping> Single Table Strategy

Annotation Description
@Inheritance 상속 전략을 정한다. 가능한 값은 SINGLE_TABLE, TABLE_PER_CLASS, JOINED 이다. 기본값은 SINGLE_TABLE
@DiscriminatorColumn 부모 클래스에 쓴다. 하위클래스를 구분할 때 사용하는 칼럼. 
discriminator value를 갖고있는 칼럼의 이름을 지정한다.
옵션값이고 기본값은 DTYPE
@DiscriminatorValue 하위 클래스에 쓰며 하위 클래스를 구분하는 유일값이다. 
옵션값이고 기본 값은 클래스 이름이다. 
이 값은 discriminator column에 저장된다.

 

 

Single Table

간단한 구현

테이블 하나에 데이터가 있기 때문에 쿼리 성능이 좋다. 

단점

나랑 상관없는 데이터는 null로 채워짐

null 값으로 채워지니까 데이터 무결성에 문제가 생길 수 있음

 

 

일단 예시는 메이븐 프로젝트 기반으로 진행

 

클래스 구현

 

대충 이렇게 관계 객체

 

이것은 추상 객체 abstract class 가 되는 User 클래스이다. 

생성자, arg이 없는 생성자, 그리고 여러 annotation들...

다시 한 번 복습하지만 아무것도 없는 생성자는 hibernate를 위한 것이다.

아무튼 특이사항을 보면 

상속 전략은 single table로 해놨고

USER_TYPE이란 칼럼에는 이제 서브 클래스에서 지정한 discriminatorValue가 들어갈 것이다.

 

 

여기도 생성자가 있고

super 메소드를 이용하여 부모 메소드를 가져온다. 

discriminatorValue를 STUDENT라고 했으니

USER_TYPE 칼럼에는 STUDENT라는 값이 들어갈 것이다.

여기는 INSTRUCTOR라고 했으니

USER_TYPE 칼럼에는 INSTRUCTOR라고 할 것이다. 

 

 

메인 메소드 구현

 

 

hibernate.cfg.xml 내용 중 하나.