본문 바로가기

컴퓨터공학/Hibernate

Hibernate> Inheritance Mapping> Table Per Class

Table per class

간단하고 직관적인 구현

구체적인 서브 클래스 쿼리 잘 수행함

 

상위클래스에 많이 join하는 쿼리 때문에 성능이 느림

많은 양의 멀티 스레드 환경에서 시퀀스 테이블을 통한 id생성이 느리다.

왜냐하면 thread safe 방식을 사용하기 때문이다. 

 

Table per class 에서는 discriminator columns 이나 values가 필요없다.

Table_per_class 전략을 사용할 때. Table generation strategy 사용해야 함

entity 클래스는 이런 형식으로 작성

 

 

 

 

각각의 테이블은 ID 칼럼이 필요하다. 

다음 생성되는 ID값은 다른 테이블이라도 이어서 생성.

예를 들어 student 테이블에서 2개 데이터를 넣었다가 instructor 에 1개를 만들면 id가 3으로 기록된다.

이걸 구현하기 위해서 sequence table을 이용한다. 

 

Hibernate DDL auto create 기능을 사용하면 HIbernate는 시퀀스 테이블을 자동으로 생성

시퀀스 테이블은 다음 id값을 위해 next_val을 갖고있다.

시퀀스 테이블을 참조해서 id값을 만듦

1씩 증가하는데 thread-safe 

 

시퀀스 테이블에 접근하기 위해 추가 접속이 필요하므로 connection.pool_size를 늘려야 한다. 

시퀀스 테이블을 만들기 위해서 MySAL 8 데이터베이스가 사용니 SQL dialect를 수정해야 한다.

MySQL8Dialect

 

 

 

main application에서는 따로 바꿀 것은 없다. 

 

 

 

 실행하며 hibernate가 잘 작동한다. 

 

 

 

 

추상 클래스에서 상속을 받아 칼럼이 잘 생성됐고

시퀀스 테이블도 참고해서 id를 생성했다.