JPA로 코드를 작성하며 자주 나오고 가장 기본적인 어노테이션들이다. 따라서 이 어노테이션들을 정리하려고 한다.
👀 @Entity
@Entity 어노테이션은 테이블과 매핑을 해주는 어노테이션으로, @Entity가 붙은 클래스는 JPA가 관리한다. @Entity 어노테이션의 속성에는 name이 있다.
name의 속성에서는 JPA에서 사용할 엔티티 이름을 지정한다. 보통은 기본값인 클래스명을 사용한다.
- 주의 사항
- 기본 생성자는 필수이다.
- JPA가 엔티티 객체 생성 시 기본 생성자를 이용한다.- final 클래스, enum, interface, inner class에는 사용 불가
- final 필드 불가
📖 @Table
엔티티와 매핑할 테이블을 지정한다. 생략 시 매핑한 엔티티 이름을 테이블명으로 사용한다. 속성으로는 name, catalog, schema, uniqueConstraints가 있다.
- name
- 매핑할 테이블 이름
- 디폴트값: 엔티티명 사용
- catalog
- catalog 기능이 있는 DB에서 catalog를 매핑
- 디폴트값 : DB명
- schema
- schema 기능이 있는 DB에서 schema를 매핑
- 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가지를 지원한다.
- AUTO (default)
- persistence provider가 특정 DB에 맞게 자동 선택
- 예시) Oracle은 SEQUENCE, MySQL은 IDENTITY 선택
- `@GeneratedValue(strategy = GenerationType.AUTO)
- IDENTITY
- 기본 키 생성을 데이터베이스에 위임한다.
- MySQL, PostgreSQL, SQL Server, DB2에서 사용 가능하다.
- @GeneratedValue(strategy = GenerationType.IDENTITY)
- SEQUENCE
- 데이터베이스 시퀀스를 사용해서 기본키를 할당한다.
- Oracle, PostgreSQL, DB2, H2에서 사용
- @GeneratedValue(strategy = GenerationType.SEQUENCE)
- TABLE
- 키 생성 전용 테이블을 만들어서 SEQUENCE처럼 사용한다.
- @GeneratedValue(strategy = GenerationType.TABLE)
📜 @Column
엔티티의 필드를 테이블의 칼럼에 매핑한다.
@Column(nullable = false, length = 255)
private String contents;
@Column 어노테이션의 선택적 속성으로는 name, nullable, length가 있다.
- name
- 필드와 매핑될 때 테이블의 칼럼 이름
- 디폴트값은 필드 이름이다.
- nullable
- true/false 값을 가짐
- true : nullable, false : not null
- length
- 문자 길이 제약 조건
- String 타입에서만 적용 가능하다.
'Spring' 카테고리의 다른 글
Spring ) Spring Security 구현 순서 (0) | 2023.07.19 |
---|---|
Spring ) Java Spring @Override annotation 이란? @Override 사용법 (0) | 2023.07.19 |
Spring ) DI, IoC 정리 (0) | 2023.07.14 |
Spring ) AOP (Aspect Oriented Programming)란? (0) | 2023.07.13 |
Spring ) AOP (0) | 2023.07.13 |