🏷 @Table

정의

@TableJPA에서 엔티티가 매핑될 데이터베이스 테이블의 이름과 속성을 지정하는 애너테이션이다.

테이블 이름을 명시하고, 필요하면 인덱스와 유니크 제약 조건도 함께 설정할 수 있다.

🧩 역할

  • 엔티티와 테이블의 매핑 이름을 지정한다.
  • 스키마와 카탈로그를 지정할 수 있다.
  • 인덱스와 유니크 제약 조건을 설정할 수 있다.

🛠 사용법

기본 예시

import javax.persistence.*;

@Entity
@Table(name = "users")
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(name = "username", nullable = false, length = 50)
    private String name;

    protected User() {}

    public User(String name) {
        this.name = name;
    }
}

📌 속성

속성 설명
name 매핑할 테이블 이름을 지정한다.
schema 매핑할 데이터베이스 스키마를 지정한다.
catalog 매핑할 카탈로그를 지정한다.
indexes 테이블 인덱스를 설정한다.
uniqueConstraints 유니크 제약 조건을 설정한다.

🧪 인덱스와 유니크 제약 조건

import javax.persistence.*;

@Entity
@Table(
    name = "users",
    indexes = {@Index(name = "idx_username", columnList = "username")},
    uniqueConstraints = {@UniqueConstraint(name = "uk_email", columnNames = "email")}
)
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(nullable = false, unique = true)
    private String email;

    @Column(nullable = false)
    private String username;
}

🗂 다중 스키마 매핑

@Entity
@Table(name = "employees", schema = "hr")
public class Employee {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String name;
}

⚠️ 장점과 단점

장점

  • 테이블 이름을 명확하게 지정할 수 있다
  • 스키마, 카탈로그, 인덱스 등 세부 설정이 가능하다
  • 유니크 제약 조건을 함께 관리할 수 있다

단점

  • 설정이 잘못되면 매핑 오류가 발생할 수 있다
  • 테이블 구조가 바뀌면 코드도 함께 수정해야 할 수 있다

📌 정리

  • @Table은 엔티티와 테이블을 매핑하는 애너테이션이다.
  • 이름, 스키마, 인덱스, 유니크 제약 조건을 지정할 수 있다.
  • 테이블 구조를 코드에서 명확히 관리할 때 유용하다.

연결문서

댓글남기기