반응형

JPA는 ORM, 객체와 테이블을 매핑하는 프레임워크를 말한다.

객체와 테이블을 정확하게 매핑하기 위해 다음과 같은 어노테이션들을 사용한다.

  • 객체와 테이블
    • @Entity - 테이블과 매핑할 클래스에 @Entity 어노테이션을 추가하는 것으로 해당 클래스가 데이터베이스와 매핑할 객체임을 알려줌.
      Entity의 중요한 3가지 원칙
      1. 기본 생성자를 꼭 가지고 있을 것
      2. final class, interface, enum, inner 클래스가 아닌 기본 클래스
      3. 저장할 필드에 final을 사용하지 말 
    • @Table - Entity와 매핑할 테이블의 이름으로 직접 지정
      @Table(schema = "Schema Name",  name="Table Name") 에서 처럼 schema 명칭과 table name으로 구성되어지며, schema 명은 생략가능하다.
      스키마 매핑과 테이블 매핑 외에 DDL 유니크 제약 조건 추가 및 Catalog 매핑을 추가할 수 있다.
  • 프라이머리 키 매핑
    • @Id - 프라이머리 키는 기본 키라고도 하며, 관계형 데이터베이스에서 각 레코드의 식별자로 이용하기에 적합한 후보 키 가운데, 설계자가 일반적으로 이용되어야 한다고 정해 놓은 것을 말한다. JPA에서는 가능한 프라이머리(기본)키를 1개만 지정할 것을 권장한다. 이를테면 MariaDB의 AUTO_INCREMENT와 같이 자동 증가하게 할 수 있고, 아니면 직접 기본 키를 지정할 수도 있다.
  • 필드와 컬럼 매핑
    • @GeneratedValue - 프라이머리(기본)키를 생성할 때 직접 할당과 자동 생성으로 나뉜다.
      @GeneratedValue(strategy = GenerationType.IDENTITY) 
      JPA에서 자동 생성에는 3가지 전략이 있다.
      1. IDENTITY : 프라이머리(기본)키 생성을 데이터베이스에 위임
      2. SEQUENCE : 데이터베이스 시퀀스를 이용해서 기본 키를 할당
      3. TABLE : 키 생성 테이블을 이
    • @Column - 필드 매핑. JPA에서 @Column을 명시하지 않으면 해당 필드의 이름으로 매핑한다.
      테이블의 컬럼명과 클래스의 필드명이 서로 다를 경우 @Column의 name속성을 이용해서 이러한 문제를 해결할 수 있으며, DDL 생성 기능으로 nullable은 null 제약 조건, length는 길이 제약 조건 등을 사용할 수 있다.
      @Column(name = "member_id", nullable = true, length = 20) 
    • @Enumerated - ENUM 타입 매핑
      @Enumerated 에는 2가지 타입이 있음.
      1. EnumType.ORDINAL
      2. EnumType.STRING
      ORDINAL은 Enum에 정의된 순서대로 JPA가 이용하며, 만약 순서가 변경된다면 가능한 STRING 타입을 이용하는 것이 좋다. STRING 타입은 데이터베이스에 문자로 저장된다.
  • 연관관계
    • @OneToOne - 일대일 매핑
    • @OneToMany - 일대다 매핑
    • @ManyToOne - 다대일 매핑
    • @ManyToMany - 다대다 매핑

 

반응형

+ Recent posts