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를 생성했다.
'컴퓨터공학 > Hibernate' 카테고리의 다른 글
Hibernate> @OneToOne, OneToMany, ManyToMany 복습 (0) | 2021.12.07 |
---|---|
Hibernate> Inheritance Mapping> Joined Tables and Mapped Superclass (0) | 2021.12.04 |
Hibernate> Inheritance Mapping> Single Table Strategy (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 |