일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- python3
- bytecode
- rabbitmq
- Spring
- 자료구조
- 파이썬3
- 장고
- 자바
- 스프링 부트
- java
- BCI
- 파이썬
- Spring Boot
- node.js
- Python
- mysql
- 보안
- django
- 디자인 패턴
- 스프링
- 개발
- db
- 웹 개발
- 안드로이드
- 데이터베이스
- HTTP
- ORM
- JPA
- 스프링부트
- 웹
- Today
- Total
semtax의 개발 일지
JPA 에서 GeneratedValue 사용할 때 주의점 본문
개요
이번 포스팅에서는 JPA에서 @GeneratedValue 를 사용할때 주의할 점에 대해서 설명하도록 하겠다.
특히, 이번시간에는 주의할 점 중에서도 Batch Insert와 관련된 내용을 다루려고 한다.
@GeneratedValue 값 생성 전략
@GenerateValue 는 일반적으로, PRIMARY 키의 기본값을 자동으로 생성할때 사용한다.
대략적으로, 아래와 같은 생성전략이 존재한다.
생성 전략 | 설명 |
---|---|
GenerationType.IDENTITY | 데이터베이스에 키 생성방법을 위임 |
GenerationType.AUTO | 각 데이터베이스 방언에 따라 자동으로 지정(기본 값) |
GenerationType.TABLE | |
GenerationType.SEQUENCE | 데이터베이스의 시퀸스를 이용해서 키 값을 생성 |
그럼 이제 @GeneratedValue 를 사용할때 생성 전략에 따라 Batch Insert 를 쓸수 있는지 없는지에 대한 관계를 알아보도록 하겠다.
Hibernate Batch Insert
하이버네이트(Hibernate) 에서는 여러개의 데이터를 한번에 Insert, Update 하게 해주는 기능인 Batch 기능을 지원하고 있다.
보통 아래와 같이 옵션으로 지정이 가능하다.
jpa:
hibernate:
ddl-auto: create
properties:
hibernate:
generate_statistics: true
dialect: org.hibernate.dialect.H2Dialect
show_sql: true
format_sql: true
order_inserts: true
order_updates: true
jdbc:
batch_size: 1000
그리고, Spring Data JPA 의 saveAll 함수를 사용하면, 여러개의 데이터를 한번에 Insert 또는 Update 할 수 있다.
하지만, @GeneratedValue 키 값 생성 전략을 Identity나 Auto로 정해놓는 경우 하이버네이트(Hibernate)에서 Batch Insert 기능을 비활성화 시켜놓고 Insert 작업을 수행하게 된다.
따라서, saveAll 과 같은 함수를 사용해도 데이터 개수만큼 INSERT 또는 UPDATE 쿼리가 나가게 된다.
그렇기 때문에, 만약 한꺼번에 여러개의 데이터를 Insert 또는 Update 해야되는 Entity의 경우 @GeneratedValue의 키값 생성 전략을 GenerationType.SEQUENCE 또는 GenerationType.TABLE 로 설정해놓고 사용하기를 바란다.
출처
'개발 > Java' 카테고리의 다른 글
스프링으로 대용량 파일 업로드 기능 구현 하기 (0) | 2021.07.04 |
---|---|
육각형 아키텍처 (1) | 2020.10.05 |
톰캣 에서는 어떻게 JSESSIONID 를 만드는 것일까? (4) | 2020.05.28 |
JPA를 이용해서 RDB에 공간정보 저장하기 (0) | 2020.05.26 |
자바 DocumentBuilder 로 UTF-8 인코딩 된 XML 파싱 하는 법 (0) | 2020.05.22 |