본문 바로가기
Web Programming/JPA(Hibernate)

JPA(Hibernate) - Table Index 생성 ( Single, Multi, Unique Index ) 예제

by 맑은안개 2021. 10. 12.

from pixabay

Table Index 생성 ( Single, Multi, Unique Index ) 예제

@Index 어노테이션을 사용하여 Index를 생성한다.

해당 어노테이션은 javax.persistence 패키지임을 유의한다.

Book.java

@Entity
@Table(indexes = @Index(columnList = "publishedDateOn"))
public class Book {

  @Id
  @GeneratedValue(strategy = GenerationType.AUTO)
  private Long id;
  private String name;
  private Date publishedDateOn;

}
  • Book entity에 @Index 어노테이션을 사용하여 Index를 생성할 컬럼을 지정한다.

생성결과

 

다음과 같이 지정한 컬럼에 Index가 생성된다. Key 이름은 무작위로 생성되는데 이를 @Index 속성 중 name 을 사용하여 이름을 지정할 수 있다.

생성결과

 

복합 인덱스 생성(Multi column index)

@Table(indexes = @Index(name="idx_book_name_published_date", columnList = "name, publishedDateOn"))
  • columnList에 comma 를 사용하여 컬럼을 나열한다.

생성결과

 

고유 인덱스 생성(Unique column index)

Book.java

  • name, author 멀티컬럼을 갖는 유니크 인덱스를 생성한다.
@Table(indexes = @Index(name="unique_idx_book_name_author", columnList = "name, author", unique = true))
public class Book {

  @Id
  @GeneratedValue(strategy = GenerationType.AUTO)
  private Long id;
  private String name;
  private Long author;
  private Date publishedDateOn;

}

생성 결과

위에서 생성한 인덱스는 Spring console log 에서 확인 할 수 있다.

Console log

Hibernate: alter table book add constraint unique_idx_book_name_author unique (name, author)

 

N개 Index 생성

@Entity
@Table(indexes = {
  @Index(name="idx_book_name", columnList = "name"),
  @Index(name="idx_book_name_published_date", columnList = "name, publishedDateOn"),
  @Index(name="unique_idx_book_name_author", columnList = "name, author", unique = true)
})
public class Book {

Console log

Hibernate: create index idx_book_name on book (name)
Hibernate: create index idx_book_name_published_date on book (name, published_date_on)
Hibernate: alter table book add constraint unique_idx_book_name_author unique (name, author)
반응형