JPA 어노테이션

하스레·2022년 5월 25일
0

객체 - 테이블 매핑

@Entity

  • JPA를 사용하여 테이블과 매핑할 클래스에 붙인다.
  • name 속성을 통해 이름을 지정할 수 있는데, 디폴트 값은 클래스명이다.
  • 기본 생성자는 필수로 있어야한다.
    (기본생성자: 매개변수 없는 public이나 protected 생성자)
    생성자가 하나도 없으면 자바에서 만들어주지만, 하나 이상 있으면 자바에서 만들어주지 않으므로 기본 생성자를 따로 직접 만들어준다.

@Table

  • 엔티티와 매핑할 테이블을 지정한다. @Table 어노테이션을 생략하면 엔티티 이름을 그대로 테이블 이름으로 정한다. name 속성을 통해 매핑할 테이블명을 지정할 수 있다.

기본 키 매핑

@Id

기본 키 매핑

@GeneratedValue

예시) @GeneratedValue(strategy = GenerationType.IDENTITY)

※ 식별자 할당 strategy

  • 직접 할당
    em.persist()로 데이터베이스에 저장하기 전에 직접 식별자를 할당한다.
  • IDENTITY
    데이터베이스에서 기본키를 자동으로 생성해주고 JPA는 이 기본 키 값을 얻어오기 위해 추가로 데이터베이스를 조회하게 된다.따라서 객체를 생성하고 em.persist(객체)를 통해 데이터베이스에 저장이 되어야 해당 객체의 아이디 값을 가져올 수 있다.
  • SEQUENCE
    데이터베이스 시퀀스에서 기본키 값을 얻고 영속성 컨텍스트에 저장한다.
  • TABLE
    데이터벵스 시퀀스 생성용 테이블에서 기본키 값을 얻고 영속성 컨텍스트에 저장한다.
  • AUTO
    선택한 데이터베이스 방언에 따라 위 세가지 중 자동으로 하나가 선택된다.

※ 기본키 선택 strategy

  • 자연키(natural key)
    ex. 주민등록번호
  • 대리키(surrogate key = 대체키)
    ex. auto_increment

=> 자연키는 변할 수 있으므로 되도록이면 대리키를 사용하자.

필드와 컬럼 매핑

@Column

객체 필드를 테이블 컬럼에 매핑할 때 사용. nullable, length 등등 속성이 있다.

@Enumerated

엔티티 클래스에서 자바의 enum타입 사용시 다음과 같이 사용. ORDINAL과 STRING이 있음. ORDINAL은 저장된 순서를 바꿀 수 없어서 되도록이면 STRING을 사용하자.

@Enumerated(EnumType.STRING)
private Category category;

@Transient

필드를 매핑하지 않으려 할 때 사용.

연관관계 매핑

profile
Software Developer

0개의 댓글