@Table
🏷 @Table
정의
@Table은 JPA에서 엔티티가 매핑될 데이터베이스 테이블의 이름과 속성을 지정하는 애너테이션이다.
테이블 이름을 명시하고, 필요하면 인덱스와 유니크 제약 조건도 함께 설정할 수 있다.
🧩 역할
- 엔티티와 테이블의 매핑 이름을 지정한다.
- 스키마와 카탈로그를 지정할 수 있다.
- 인덱스와 유니크 제약 조건을 설정할 수 있다.
🛠 사용법
기본 예시
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은 엔티티와 테이블을 매핑하는 애너테이션이다.- 이름, 스키마, 인덱스, 유니크 제약 조건을 지정할 수 있다.
- 테이블 구조를 코드에서 명확히 관리할 때 유용하다.
댓글남기기