티스토리 뷰
JPA는 자바 ORM기술의 표준이고 ORM(Object Relational Mapping)은 이름 그대로 객체과 관계형 데이터 베이스를 연결해 주는 기술입니다. 따라서 JPA는 class와 table을 연결해주는 기능을 제공하고 있는데 이는 여러가지 어노테이션으로 어렵지 않게 이용할 수 있습니다.
@Entity
class에 @Entity을 붙임으로서 JPA가 관리하는 엔티티 클래스라는 것을 명시해줄 수 있습니다. 테이블과 매핑될 클래스에는 필수로 붙여줘야 합니다. 주의 할 점은 다음과 같습니다.
- public 혹은 protected의 접근 제한자를 가진 기본생성자가 필하다는 것
- final 클래스, enum, inner, interface 클래스에는 상용할 수 없다는 것
- final이 붙은 필드는 테이블에 저장되지 않는다는 것
단 생성자의 경우, 아무런 생성자를 정의 하지 않은 클래스는 기본 생성자를 자동으로 만들어 사용하기 때문에 생략가능 합니다. @Entitiy에는 name 속성이 있어 JPA에서 사용할 엔티티의 이름을 지정할 수 있습니다.
@Table
엔티티 클래스에 @Table을 붙임으로서 매핑할 테이블을 지정할 수 있습니다.
- name: 매핑할 테이블 이름 (default: Entity이름)
- catalog: catalog 매핑
- schema: schema 매핑
- uniqueConstraints: ddl 생성시 유니크 제약 조건 생성
@Id, @GeneratedValue
기본키를 매핑합니다. @GeneratedValue를 함께 사용할 경우 기본키 자동생성 기능을 사용할 수 있습니다.
@GeneratedValue strategy:
- TABLE: 키 생성용 테이블을 만들어 사용
- SEQUENCE: 시퀀스 오브젝트 사용
- IDENTITY: 데이베이스에 위임 [ex: Mysql의 경우 auto increment]
- AUTO: 데이터베이스에 따라 자동 지정 (default)
@Colummn
엔티티의 필드가 테이블의 컬럼과 어떻게 매핑 될것인지 명시해줍니다.
- name: 매핑될 컬럼의 이름 (default: 필드 이름 snake case)
- nullable: nullable 여부 (default: true)
- uniqe: uniqu 여부
- length: String 길이 제한 (default: 255)
@Enumerated
enum 타입과 매핑할 때 사용합니다.
- value:
- ORDINAL: enum의 순서를 저장
- STRING: enum case의 이름을 저장
@Temporal
시간과 관련된 타입을 매핑할때 사용합니다.
- value:
- DATE: db의 date와 매핑
- TIME: db의 time과 매핑
- TIMESTAMP: timestamp와 매핑
ref.
'jpa' 카테고리의 다른 글
[JPA] Entity 연관관계 (0) | 2022.01.06 |
---|---|
[JPA] JPA와 영속성 컨텍스트(Persistence Context)에 대해 (0) | 2021.12.01 |