Home Jpa Oracle사용시 임시테이블 비활성화하는 방법
Post
Cancel

Jpa Oracle사용시 임시테이블 비활성화하는 방법

SpringBoot로 JPA를 통해 DB에 연결할때 다른 RDBMS는 괜찮은데 유난히 오라클에서만 임시테이블을 만드는 경우가 있다.

1
CREATE SEQUENCE SEQ INCREMENT BY 50 START WITH 1 MAXVALUE 9999999999999999;
1
2
3
4
5
6
7
@Entity @Getter
@Table(name = "USERS")
public class User {

  @Id @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ")
  private Long userKey;
}

오라클에서는 키값을 부여할 때 주로 시퀀스를 많이 사용하기 때문에 시퀀스를 준비하고 User객체를 만들때 JPA가 시퀀스를 통해 key를 자동부여하도록 설정했다.

1

그런데 ddl-auto를 사용하지 않음으로 지정했음에도 불구하고 HTE_USERS라는 이름의 global temporary table이 자동생성된다.

이 임시 테이블이 생기는 것은 사실 allocationSize 가 1보다 크기 때문이다.
allocationSize가 1보다 크면 내가 실제로 multi-row inserts를 사용하지 않더라도 이를 대비하여 JPA가 global temporary table을 자동으로 생성한다.

https://discourse.hibernate.org/t/hte-prefix-added-on-default-to-database-table-names/7189/6

1
CREATE SEQUENCE SEQ INCREMENT BY 1 START WITH 1 MAXVALUE 9999999999999999;
1
2
3
4
5
6
7
8
9
10
11
12
13
@Entity @Getter
@SequenceGenerator(
        name = "SEQUENCE_GENERATOR",
        sequenceName = "SEQ",
        allocationSize = 1
)
@Table(name = "USERS")
public class User {

  @Id
  @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQUENCE_GENERATOR")
  private Long userKey;
}

따라서 이런 식으로 allocationSize를 1로 줄이면 더이상 오라클에 임시테이블을 만들지 않는다.

This post is licensed under CC BY 4.0 by the author.

리눅스 자주 사용하는 명령어 설치하기

Db의 물리적인 성능 판단