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 내용 중 하나.
'컴퓨터공학 > Hibernate' 카테고리의 다른 글
Hibernate> Inheritance Mapping> Joined Tables and Mapped Superclass (0) | 2021.12.04 |
---|---|
Hibernate> Inheritance Mapping> Table Per Class (0) | 2021.12.04 |
Hibernate> Mapping Components Embeddable and Enums (0) | 2021.11.20 |
Hibernate> Mapping Collection> Map, Sorted Set, Sorted Map (0) | 2021.11.20 |
Hibernate> Mapping Collection framework - Set and List (0) | 2021.11.18 |