[Kotlin Spring JPA] @Entity, @Table, @Id, @Column 사용해 Table 정보 설정하는 방법 한 번에 정리하기

2024. 12. 3. 07:55· Spring/Database
목차
  1. @Entity와 @Id 어노테이션 사용해 테이블 정의하기
  2. @Entity의 name 프로퍼티 설정해 테이블 이름 설정하기
  3. @Table 어노테이션 사용해 테이블 정보 설정하기
  4. @Column 어노테이션 사용해 컬럼의 속성 설정하기
반응형

@Entity와 @Id 어노테이션 사용해 테이블 정의하기

특정 클래스에 @Entity 어노테이션을 사용하면 테이블을 정의할 수 있다. 예를 들어 단어 정보를 저장하기 위한 Vocabulary 테이블을 정의한다고 해보자. 이런 테이블은 다음과 같이 정의될 수 있다. 

@Entity
data class Vocabulary(
    @Id
    val id: String = UUID.randomUUID().toString(),
    val word: String,
    val meaning: String
)

 

이 테이블의 이름은 클래스의 이름과 같은 Vocabulary가 되며, 내부에는 아이디 id, 단어 word,  뜻 meaning 세가지 필드를 가진다. 테이블에는 꼭 Primary Key가 필요하기 때문에 id 변수 위에는 @Id 어노테이션을 붙여 이 필드가 Primary Key라는 것을 알려야 한다. 이렇게 만든 후 스프링 애플리케이션을 실행하면 다음과 같이 VOCABULARY 테이블과 내부에 선언된 ID, MEANING, WORD 컬럼을 확인할 수 있다.

 

 

여기서 중요한 것은 꼭 @Entity가 붙은 클래스가 있다면 테이블로 만들어지게 되기 때문에 @Id가 붙은 필드가 있어야 한다는 점이다. 만약 없다면 다음과 같이 Primary Key가 있어야 한다는 경고 문구가 나온다.

Persistent entity 'Vocabulary' should have primary key
영속성 엔티티인 Vocabulary는 Primary Key가 있어야 합니다. 

 

 

이처럼 테이블을 만드는 것은 매우 간단하다. 

이어서 이 Entity에 다양한 옵션을 적용하는 방법을 알아보자.

 

@Entity의 name 프로퍼티 설정해 테이블 이름 설정하기

@Entity의 name 프로퍼티를 사용하면 테이블의 이름을 커스텀하게 설정할 수 있다. 예를 들어 테이블의 이름을 Vocabulary가 아닌, Voca로 설정하고 싶다면 다음과 같이 name 프로퍼티를 "Voca"로 설정하면 된다. 

@Entity(name = "Voca") // Entity명 지정도 가능
data class Vocabulary(
    @Id
    val id: String = UUID.randomUUID().toString(),
    val word: String,
    val meaning: String
)

 

그러면 다음과 같이 테이블의 이름이 VOCA로 변경되는 것을 볼 수 있다.

 

 

이렇게 테이블의 이름을 설정할 수도 있지만 JPA은 테이블의 정보를 더욱 세밀하게 지정할 수 있는 @Table 어노테이션을 지원한다. 이어서 이에 대해 알아보자.

 

@Table 어노테이션 사용해 테이블 정보 설정하기

@Table 어노테이션을 사용하면 테이블의 이름과, 어떤 필드에 인덱싱을 할지를 설정할 수 있다. 예를 들어 단어를 저장하는 테이블의 이름은 VocaTable이라 지정하고, word 컬럼에 인덱싱을 하고 싶다고 해보자. 그러면 다음과 같이 @Table 어노테이션을 설정하면 된다.

@Entity
@Table(name = "VocaTable", indexes = [Index(name = "idx_word", columnList = "word")])
data class Vocabulary(
    @Id
    val id: String = UUID.randomUUID().toString(),
    val word: String,
    val meaning: String
)

 

 그러면 다음과 같이 VOCA_TABLE이라는 이름을 가진 테이블이 생성되고, IDX_WORD라 불리는 WORD를 인덱싱한 인덱스가 생성되는 것을 볼 수 있다. 

 

 

 

이 외에도 schema, catalog, uniqueConstraints 같은 프로퍼티를 이 @Table 어노테이션을 사용해 설정할 수 있다. 

 

지금까지 우리는 테이블의 속성을 설정하는 방법을 아아봤다. 이번에는 @Column 어노테이션 사용해 컬럼의 속성을 설정하는 방법을 알아보자.

 

@Column 어노테이션 사용해 컬럼의 속성 설정하기

@Column 어노테이션을 사용하면 컬럼의 속성을 설정할 수 있다. @Column 어노테이션을 통해서는 다음 속성들을 설정할 수 있다.

  1. name: 컬럼의 이름을 설정하는데 사용. 설정하지 않으면 필드의 이름이 컬럼의 이름으로 설정됨.
  2. unique: 현재 필드에 UNIQUE 제약을 걸지 여부를 결정. 기본 값은 false.
  3. nullable: 현재 필드가 NULL이 될 수 있는지 설정. 기본 값은 true.
  4. insertable: 엔티티 저장 시 해당 필드도 함께 저장할지 여부를 결정. 기본값은 true로 설정됨.
  5. updatable: 엔티티 수정 시 해당 필드도 함께 수정될지 여부를 결정. 기본값은 true로 설정됨.
  6. columnDefinition: 컬럼 정보를 직접 설정할 때 사용.
  7. table: 하나의 엔티티가 두 개 이상의 테이블에 매핑돼야 할 때 사용
  8. length: 컬럼의 최대 길이 설정. 기본 값은 255.
  9. precision: 소수점을 포함한 전체 자릿수 지정. 기본 값은 19.
  10. scale: 소수점 이하의 자리수 지정. 기본 값은 2.

 

예를 들어 MEANING 컬럼의 이름을 MEAN으로 지정하고 싶다면 다음과 같이 name="mean"을 사용하면 된다.

@Entity
data class Vocabulary(
    @Id
    val id: String = UUID.randomUUID().toString(),
    val word: String,
    @Column(name = "mean") // Column명 지정도 가능
    val meaning: String
)

 

그러면 다음과 같이 meaning 필드의 컬럼명이 MEAN이 되는 것을 볼 수 있다.

 

 

전체 코드: GitHub
이 프로젝트가 도움이 되셨다면 저장소에 Star⭐️를 눌러주세요! Stargazers는 다음 페이지에서 확인할 수 있습니다.
반응형
저작자표시 비영리 변경금지
  1. @Entity와 @Id 어노테이션 사용해 테이블 정의하기
  2. @Entity의 name 프로퍼티 설정해 테이블 이름 설정하기
  3. @Table 어노테이션 사용해 테이블 정보 설정하기
  4. @Column 어노테이션 사용해 컬럼의 속성 설정하기


 

Kotlin, Android, Spring 사용자 오픈 카톡

오셔서 궁금한 점을 질문해보세요!
비밀번호 : kotlin22

open.kakao.com

'Spring/Database' 카테고리의 다른 글
  • [Spring JPA] 실행된 SQL문 로깅하고 포멧팅 하는 방법 한 번에 정리하기
  • [Kotlin Spring JPA] JpaRepository, @Query 사용해 데이터베이스에 쿼리 하는 방법 한 번에 정리하기
  • [Kotlin Spring] Spring Data JPA 와 H2 Database 사용 설정하는 방법 알아보기
Dev.Cho
Dev.Cho
'조세영의 Kotlin World'는 Kotlin를 전문적으로 다루는 개인 기술 블로그입니다. Kotlin 세계에 대한 양질의 자료를 제공하며 Kotlin, Android, Spring, CI, CD 분야에 대해 다룹니다.
Dev.Cho
조세영의 Kotlin World
Dev.Cho
전체
오늘
어제

블로그 메뉴

  • LinkedIn
  • GitHub
  • 분류 전체보기 (491)
    • Kotlin (104)
      • Class and Interface (19)
      • Variable and Function (8)
      • Modifier (5)
      • Collection (14)
      • Time (8)
      • 동시성 제어 (7)
      • Reactive Programming (2)
      • Paradigm (2)
      • Kotlin 자료구조 (15)
      • Design Patterns (11)
      • Algorithm (3)
      • Exception (1)
      • 기타 (9)
      • Update History (0)
    • Coroutines (32)
      • Coroutine Basics (18)
      • Flow (9)
      • CoroutineScope (3)
      • Debugging (2)
    • Testing Codes (28)
      • Test 기본 (3)
      • JUnit5 (9)
      • MockK (6)
      • Testing Coroutines (1)
      • Testing Android (8)
      • Test 기타 (1)
    • Spring (50)
      • Dependency Injection (18)
      • Settings (5)
      • REST API (0)
      • DevTools (1)
      • MVC (18)
      • Error (2)
      • MongoDB (2)
      • Database (4)
    • Android (39)
      • Architecture (2)
      • Component (5)
      • Manifest (1)
      • Lifecycle (2)
      • Dependency Injection (17)
      • Resource (1)
      • Storage (1)
      • Security and Optimization (1)
      • WebView (2)
      • Error (6)
    • Android Jetpack Compose (33)
      • Compose (6)
      • Compose Modifier (13)
      • Compose Resource (4)
      • Compose State (4)
      • Compose Side Effect (6)
    • Android Jetpack Compose UI (48)
      • Compose Layout (14)
      • Compose Text (10)
      • Compose Button (5)
      • Compose Dialog (2)
      • Compose TextField (0)
      • Compose UIs (4)
      • Compose Animation (1)
      • Compose Canvas (12)
    • Android Jetpack (10)
      • Datastore (5)
      • ViewModel (4)
      • LiveData (1)
      • Paging (0)
    • KMP (5)
    • Programming (4)
    • Machine (9)
      • JVM (7)
      • Linux (2)
    • CI, CD (74)
      • Gradle (12)
      • Groovy Gradle (5)
      • Git (25)
      • Git Remote (5)
      • GitHub (5)
      • GitHub Actions (21)
    • Network (33)
      • GraphQL (12)
      • HTTP (11)
      • Basic (9)
    • 오픈소스 (3)
    • Database (3)
      • MongoDB (3)
    • IDE (6)
      • Android Studio (2)
      • Intellij (4)
    • Firebase (1)
    • Javascript (9)

공지사항

  • 코틀린 코루틴 완전 정복 강의 in 인프런 오픈
  • 코틀린 코루틴의 정석 책 출간
  • Kotlin Coroutines 공식 기술 문서 한국어 번⋯
  • GitHub에서 조세영의 Kotlin World를 Foll⋯
  • 문의&제안

인기 글

태그

  • Android Compose
  • 의존성 주입
  • Android
  • 코틀린
  • flow
  • Class
  • java
  • Spring boot
  • Kotlin
  • 안드로이드
  • Unit Testing
  • 코루틴
  • dagger2
  • Jetpack Compose
  • github actions
  • compose
  • 유닛 테스팅
  • junit
  • junit4
  • github
  • junit5
  • GIT
  • kotlin spring
  • 스프링
  • gradle
  • Coroutine
  • GraphQL
  • Dependency Injection
  • Spring
  • HTTP

최근 글

반응형
hELLO · Designed By 정상우.v4.3.0
Dev.Cho
[Kotlin Spring JPA] @Entity, @Table, @Id, @Column 사용해 Table 정보 설정하는 방법 한 번에 정리하기
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.