일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- org.apache.ibatis.binding.BindingException
- anyMatch
- 캐쉬가능
- ERROR TYPE : org.apache.ibatis.binding.BindingException
- RFC723x
- SpringBoot
- HTTP3
- KAKAOLOGINAPI
- DB방언
- @Entity
- Transaction not successfully started
- @Table
- 무상태프로토콜
- JPA
- gitrevert
- Git
- 데이터베이스 방언
- Invalid bound statement (not found)
- 매핑정보가없는필드
- HTTPMESSAGE
- 자바ORM표준프로그래밍
- http
- hibernate.dialect
- initialDelay
- 네이버로그인API
- 멱등활용
- 네이버 연결된 서비스
- 김영한JPA
- fixedDelay
- gitreset
- Today
- Total
twocowsong
TABLE 전략 본문
깃허브 정리 URL : https://github.com/sWineTake/jpa.git
TABLE 전략은 키 생성 전용 테이블을 하나 만들고 여기에 이름과 값으로 사용할 컬럼을 만들어 DB 시퀀스를 흉내내는 전략입니다.
아래와같이 TABLE을 생성 하겠습니다.
CREATE TABLE MY_SEQUENCES (
SEQUENCE_NAME VARCHAR(255) NOT NULL,
NEXT_VAL INT,
PRIMARY KEY (SEQUENCE_NAME)
);
SEQUENCE_NAME 컬럼을 시퀀스 이름으로 사용하고 NEXT_VAL 컬럼을 시퀀스 값으로 사용합니다.
참고로 컬럼의 이름은 변경할 수 있는데 여기서 사용한 것이 기본 값입니다.
@Entity
@TableGenerator(
name = "BOARD_SEQ_GENERATOR",
table = "MY_SEQUENCES",
pkColumnName = "BOARD_SEQ", allocationSize = 1
)
@Getter
@Setter
public class BoardTable {
@Id
@GeneratedValue(strategy = GenerationType.TABLE,
generator = "BOARD_SEQ_GENERATOR")
private Long id;
...
}
@TableGenerator를 사용해서 테이블 키 생성기를 등록했습니다.
여기서 BOARD_SEQ_GENERATOR라는 이름의 테이블 키 생성기를 등록하고 방금 생성한 MY_SEQUENCES 테이블을 키 생성용 테이블로 매핑하였습니다.
그리고 TABLE전략을 사용하기위해 @GeneratedValue.strategy 값을 GenerationType.TABLE 로 설정하였습니다.
@GeneratedValue.generator에 방금 만든 테이블 키 생성기를 지정했습니다.
이제부터 ID 식별자 값은 BOARD_SEQ_GENERATOR 테이블 키 생성기가 할당합니다.
BoardTable board = new BoardTable();
em.persist(board);
System.out.println("board id : " + board.getId());
TABLE 전략은 시퀀스 대신에 테이블을 사용한다는것만 제외하면 SEQUENCE전략과 내부 동작방식이 같습니다.
위의 em.persist를 실행하면 아래와같이 데이터가 추가됩니다.
my_sequences 테이블을 보면 pkColumnName = "BOARD_SEQ"가 컬럼명으로 추가된것을 확인할수 있습니다.
이제 키 생성기를 사용할때마다 next_val 컬럼 값이 증가합니다.
(저는 테스트로 반복문으로 10번을 반복하여서 next_val 값이 10이 나왔습니다. 정상적으로 1이 출력됩니다.)
@TableGenerator를 분석하면 아래와 같습니다.
속성 | 기능 | 기본값 |
name | 식별자 생성기 이름 | 필수 |
table | 키생성 테이블명 | hibernate_sequences |
pkColumnName | 시퀀스 컬럼명 | sequence_name |
valueColumnName | 시퀀스 값 컬럼명 | next_val |
pkColumnValue | 키로 사용할 값 이름 | 엔티티 이름 |
initialValue | 초기 값, 마지막으로 생성된 값이 기준 | 0 |
allocationSize | 시퀀스 한 번 호출에 증가 하는 수 ( 성능 최적 화에 사용) | 50 |
catalog, schema | DB catalog, schema이름 | |
uniqueConstraints(DDL) | 유니크 제약 조건을 지정 |
'IT > JPA' 카테고리의 다른 글
기본 키 매핑 정리 (0) | 2022.05.16 |
---|---|
AUTO 전략 (0) | 2022.05.16 |
SEQUENCE 전략 (0) | 2022.05.14 |
IDENTITY 전략 (0) | 2022.05.13 |
기본 키 직접 할당 전략 (0) | 2022.05.13 |