[JPA] 03-엔티티매핑

heyhey·2023년 2월 27일
0

JPA

목록 보기
3/7

객체와 테이블 매핑

@Entity


@Entity 가 붙은 클래스는 엔티티라 하며 JPA가 관리한다
JPA 를 사용해 테이블과 매핑할 클래스는 필수로 붙여야한다.

주의

  • 기본 생성자를 붙여야 생성이 된다. (파라미터가 없이 사용 / protected 사용 등)
  • 저장할 필드에 final 사용하면 안된다.

속성

  • name
    @Entity(name="?")
    JPA에서 사용할 엔티티 이름을 지정한다.
    기본값은 클래스 이름 그대로이다. (Member)
    웬만하면 기본값을 쓰는 것을 권장한다.

@Table

엔티티와 매핑할 테이블을 지정한다.

속성

  • name : 매핑할 테이블 이름
@Entity
@Table(name = "ORDERS")
public class Order {...}

데이터 베이스 스키마 자동 생성


DDL을 애플리케이션 실행 시점에 자동으로 생성한다.
테이블 중심의 개발에서 객체 중심의 개발을 할 수 있게 된다.
데이터 베이스 방언을 이용해 원하는 DB를 사용할 수 있다.

DB 초기화가 될 수 있기 떄문에 운영서버에서 사용하지 않는다.
(create,create-drop,update)
개발 초기에만 사용
테스트 서버는 Update,validate 사용
테이징과 운영 서버는 validate 또는 none

속성

  • create : 기존 테이블을 삭제 후 다시 생성한다. (drop+create)
  • create-drop : 생성해놓고 종료할 때 (drop한다.)
  • update : 변경분만 반영이된다. => 운영 DB 사용 금지
  • validate : 엔티티와 테이블이 정상 매핑되었는지 확인한다.
  • none : 사용하지 않겠다 (안적어도 되지만 명시적인 의미)

필드와 컬럼 매핑


<property name="hibernate.hbm2ddl.auto" value="update" />

매핑 어노테이션

@Column

  • 컬럼 매핑
  • @Column(name:"ORDER_ID") : 필드와 매핑할 테이블의 컬럼 이름

@Temporal

  • 날짜 타입 매핑
  • LocalDate, LocalDateTime을 사용할 때는 생략 가능

@Enumerated

  • enum 타입 매핑
  • ORDINAL을 사용하면 안된다. => @Enumerated(EnumType.STRING)
  • string을 사용하지 않으면 index가 사용되고, 테이블이 수정되면 인덱스도 수정되어 문제가 생긴다.

@Lob

  • 긴 글 (Blob,clob)

@Transient

  • 필드 매핑을 안 시킨다.
  • 주로 메모리 상에서 어떤 값을 보관하고 싶을 때 사용한다.

키 매핑


기본 키 매핑 어노테이션

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "MEMBER_ID")
private Long id;

@Id

직접 할당할때 @Id만 사용한다.

@GeneratedValue

자동 생성해준다

  • strategy = GenerationType.AUTO : 방언에 따라 자동 지정된다(기본값)

  • AUTO 아닌 IDENTIFY

    • 기본 키 생성을 데이터베이스에 위임한다.
    • JPA는 보통 트랜잭션 커밋 시점에 INSERT SQL을 실행한다.
    • IDENTIFY 전략은 em.persist() 시점에 INSERT SQL을 실행하고 DB에서 식별자를 조회한다.
profile
주경야독

0개의 댓글