Spring

Spring ) @Id, @Column, @GeneratedValue, @Entity, @Table

Albosa2lol 2023. 7. 14. 22:54

JPA로 코드를 작성하며 자주 나오고 가장 기본적인 어노테이션들이다. 따라서 이 어노테이션들을 정리하려고 한다.

👀 @Entity

@Entity 어노테이션은 테이블과 매핑을 해주는 어노테이션으로, @Entity가 붙은 클래스는 JPA가 관리한다. @Entity 어노테이션의 속성에는 name이 있다.

name의 속성에서는 JPA에서 사용할 엔티티 이름을 지정한다. 보통은 기본값인 클래스명을 사용한다.

  • 주의 사항
    - 기본 생성자는 필수이다.
    - JPA가 엔티티 객체 생성 시 기본 생성자를 이용한다.
    • final 클래스, enum, interface, inner class에는 사용 불가
    • final 필드 불가

📖 @Table

엔티티와 매핑할 테이블을 지정한다. 생략 시 매핑한 엔티티 이름을 테이블명으로 사용한다. 속성으로는 name, catalog, schema, uniqueConstraints가 있다.

  1. name
    • 매핑할 테이블 이름
    • 디폴트값: 엔티티명 사용
  2. catalog
    • catalog 기능이 있는 DB에서 catalog를 매핑
    • 디폴트값 : DB명
  3. schema
    • schema 기능이 있는 DB에서 schema를 매핑
  4. uniqueConstraints
    • DDL 생성 시 unique 제약조건을 건다.
    • 스키마 자동 생성 기능을 이용하여 DDL을 만들 때만 사용

✅ @Id

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int boardId;

@Id 어노테이션은 위와 같이 사용한다. @Id 어노테이션은 식별자 필드로, 엔티티의 필드를 테이블의 기본 키 (PK, Primary key)에 매핑하는 역할을 한다.

속성에 직접 @Id를 붙여주면 실행 시점에 객체의 필드를 통해 직접 접근하게 하는 거싱며, getter를 이용하려면 getter에 @Id를 붙여준다. 속성에 부여하게 되면 setter/getter 없이도 작업 가능하다. 하지만, setter에 @Id를 붙이면 예외가 발생한다.

위의 코드에서 보면 boardId가 @Id를 통해 해당 테이블의 PK로 매핑될 것임을 짐작할 수 있다.

💾 @GeneratedValue

GeneratedValue 어노테이션은 어노테이션명처럼 자동 생성을 도와준다. 즉 주키의 값을 위한 자동 생성 전략을 명시하는데 사용한다. 선택적 속성으로는 generator와 strategy가 있다.

strategy는 persistence provider가 엔티티의 주키를 사용할 때 사용해야 하는 주키생성 전략을 의미한다. 이때 strategy의 기본값은 AUTO이다. generator는 SequenceGenerator나 TableGenerator 어노테이션에서 명시된 주키 생성자를 재사용할 때 사용한다. 디폴트 값은 ""이다.

strategy

주키 생성 전략을 뜻하는 strategy 속성에는 4가지를 지원한다.

  1. AUTO (default)
    • persistence provider가 특정 DB에 맞게 자동 선택
    • 예시) Oracle은 SEQUENCE, MySQL은 IDENTITY 선택
    • `@GeneratedValue(strategy = GenerationType.AUTO)
  2. IDENTITY
    • 기본 키 생성을 데이터베이스에 위임한다.
    • MySQL, PostgreSQL, SQL Server, DB2에서 사용 가능하다.
    • @GeneratedValue(strategy = GenerationType.IDENTITY)
  3. SEQUENCE
    • 데이터베이스 시퀀스를 사용해서 기본키를 할당한다.
    • Oracle, PostgreSQL, DB2, H2에서 사용
    • @GeneratedValue(strategy = GenerationType.SEQUENCE)
  4. TABLE
    • 키 생성 전용 테이블을 만들어서 SEQUENCE처럼 사용한다.
    • @GeneratedValue(strategy = GenerationType.TABLE)

📜 @Column

엔티티의 필드를 테이블의 칼럼에 매핑한다.

@Column(nullable = false, length = 255)
private String contents;

@Column 어노테이션의 선택적 속성으로는 name, nullable, length가 있다.

  1. name
    • 필드와 매핑될 때 테이블의 칼럼 이름
    • 디폴트값은 필드 이름이다.
  2. nullable
    • true/false 값을 가짐
    • true : nullable, false : not null
  3. length
    • 문자 길이 제약 조건
    • String 타입에서만 적용 가능하다.