본문 바로가기

JPA

엔티티 매핑

@Entity

  • JPA를 사용해서 테이블과 매핑할 클래슨는 @Entity 필수( 기본 생성자 필수 )

 

 

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

  • create 기존테이블 삭제 후 다시 생성(DROP + CREATE)
  • create-drop  create와 같으나 종료시점에 테이블 drop
  • update  변경분만 반영
  • validate  엔티티와 테이블이 정상 매핑되었는지만 확인
  • none 사용하지 않음(주석처리)

결과>> 기존 테이블을 drop하고 다시 create한다.

 

매핑 어노테이션 정리

 

  • @Column  컬럼 매핑
  • @Temporal 날짜 타입 매핑 : LocalDate, LocalDateTime 사용 시 생략 가능
  • @Enumerated enum 타입 매핑 : ORDINAL, STRING이 있는데 ORDINAL은 사용 X
  • @Lob  BLOB, CLOB매핑
  • @Transient  특정 필드를 컬럼에 매핑하지 않음(매핑 무시)

기본 키 매핑

  • @Id (직접 할당)
  • @GeneratedValue(자동 생성)
    • IDENTITY  데이터베이스에 위임 (MYSQL 등)
    • SEQUENCE  데이터베이스 시퀀스 오브젝트 사용 (ORACLE 등)
    • TABLE  키 생성용 테이블 사용, 모든 DB에서 사용
    • AUTO  기본 값

 

IDENTITY 전략

  • 기본 키 생성을 데이터베이스에 위임(MySQL의 AUTO_INCREMENT)
  • em.persist() 시점에 즉시 INSERT SQL 실행
    • 영속성 컨텍스트의 값을 알 수 있다.
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
            System.out.println("====================");
            em.persist(member);
            System.out.println("member.id = " + member.getId());
            System.out.println("====================");

결과>>

 

SEQUENCE 전략

 

@Entity
@SequenceGenerator(
        name = "MEMBER_SEQ_GENERATOR",
        sequenceName = "MEMBER_SEQ", //매핑할 데이터베이스 시퀀스 이름
        initialValue = 1, allocationSize = 1)
public class Member {

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE,
            generator = "MEMBER_SEQ_GENERATOR")
    private Long id;
  • name  식별자 생성기 이름
  • sequenceName  데이터베이스에 등록되어 있는 시퀀스 이름
  • allocationSize 시퀀스 한 번 호출에 증가하는 수(기본 값 50)
  • catalog, schema  데이터베이스 catalog, schema 이름
            System.out.println("====================");
            em.persist(member);
            System.out.println("====================");

결과>>

DB에 생성한 MEMBER_SEQ에서 다음 값을 호출 한 뒤 ID에 값을 넣어준다.

ID에 값을 넣으면 영속성 컨텍스트에 저장한다.

 

한 번에 모아서 commit한다.

 

allocationSize에 관해서 (기본값은 50)

em.persist를 이용해서 저장할 때마다 call next 로 가져오면 성능문제를 가져올 수 있는데

이미 50개사이즈를 DB에 올려놓고 메모리에서 1씩 쓰는 방법이다.

만약 50개 다쓰면 next call로 50개 더 가져와서 메모리에서 사용하는 방식

결과>>

 

 

TABLE 전략

  • 모든 데이터베이스에서 적용 가능하지만 성능면에서 단점이 있다.

권장하는 식별자 전략

  • AUTO_INCREMENT or SEQUENCE 권장

 

 

 

출처 - www.inflearn.com/course/ORM-JPA-Basic

'JPA' 카테고리의 다른 글

[JPA] 지연 로딩과 즉시 로딩  (2) 2021.01.09
[JPA] 프록시란?  (0) 2020.12.23
상속관계 매핑  (0) 2020.12.22
연관관계 매핑  (0) 2020.12.22
영속성 관리  (1) 2020.12.21