JPA 기본키 생성 전략

2021. 10. 31. 17:08·Web

JPA를 사용하여 saveAll을 할 경우 100개의 데이터를 저장하는데 100개의 쿼리를 날린다.

insert를 할때 batch_size를 지정하여 쿼리를 한번에 날릴 수 있다는 글을 보고 시도를 했는데 적용이 되지 않았다.

그 이유는 아래 글에 나와있고, 해결방법은 native query를 사용하거나 stategy=table 옵션을 사용하는 등의 방법이 있는 것 같다.

 

JPA를 사용할때

@Entity 와 함께 필수적으로 사용해야할 @Id가 있다.

이때 Id값을 어떻게 자동으로 생성해 줄지 정해줄 수 있다. 오늘은 이것에 대해 알아보자

@GeneraterdValue

@GeneraterdValue 어노테이션을 사용하면 Stategy 라는 옵션을 설정해 기본키 생성 전략을 정할 수 있다.

옵션은 AUTO, IDENTITY, SEQUENCE, TABLE 4종류가 있다.

IDENTITY

기본키 생성을 데이터베이스에 위임하는 방식이다.

auto_increment를 사용해서 기본키를 생성하는 방식으로, commit을 하여 DB에 저장되지 않는다면 키값을 알 수 없다.

때문에 properties.setPropertiy("hibernate.jdbc.batch_size", "100") 와 같은 한번에 저장하는 옵션에는 적용할 수 없다.

SEQUENCE

시퀀스 전략은 DB에서 값을 미리 받아오는 방식이다.

먼저 next_sequence(id값)를 지정된 갯수만큼 DB에서 발급받는다. 이때 갯수는 allocationSize 라는 값을 통해 지정할 수 있다.

이때 allocationSize가 100이고, 저장하려는 데이터가 101이라면 DB호출을 한번 더하여 또 100개의 next_sequence를 가져와야한다.

allocationSize를 적게 잡으면 잦은 DB호출이 일어나고, 많이 잡으면 메모리가 낭비될 수 있다.

TABLE

테이블 전략은 키 전용 테이블을 생성해서 키 값을 관리하는 방식이다.

최적화 되지않은 테이블을 사용하게되면 성능상 이슈가 있을 수 있어 운영 서버에서는 사용하지 않는다고한다.

그만 알아보자.

AUTO

데이터베이스(방언)에 따라 위의 세가지 전략을 자동으로 지정한다.

mysql - auto_increment / oracle - sequence

 

'Web' 카테고리의 다른 글

관심사의 분리  (0) 2022.03.13
좋은 객체 지향 설계의 5가지 원칙(SOLID)  (0) 2022.03.13
아파치와 톰캣의 차이  (0) 2020.11.01
HttpServletRequst와 HttpServletResponse  (0) 2020.11.01
프록시x게이트웨이x터널  (0) 2020.09.25
'Web' 카테고리의 다른 글
  • 관심사의 분리
  • 좋은 객체 지향 설계의 5가지 원칙(SOLID)
  • 아파치와 톰캣의 차이
  • HttpServletRequst와 HttpServletResponse
마술사의 수습생
마술사의 수습생
언젠간 당신처럼 되고 싶어요.
  • 마술사의 수습생
    개발 기록 블로그
    마술사의 수습생
  • 전체
    오늘
    어제
    • 분류 전체보기 (53)
      • Web (50)
      • 일기 (2)
      • 잡담 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
마술사의 수습생
JPA 기본키 생성 전략
상단으로

티스토리툴바