[JPA] 엔티티 매핑

Hyunho·2021년 6월 9일
0

엔티티 매핑

@Entity

  • @Entity가 붙은 클래스는 JPA가 관리한다.
  • JPA를 사요해서 테이블과 매핑할 클래스는 @Entitiy필수
  • 주의 사항
    • 기본 생성자필수(파라미터가 없는 public 또는, prorected생성자)
    • final 클래스, enum, interface, inner 클래스 사용 X
    • 저장할 필드에 final 사용 X
@Entity
public class Member{
    
}

@Table

  • 속성

    • name - 매핑할 테이블 이름 (Defult - 엔티티 이름 사용)
      • @Table(name = "table name")
        • 테이블 이름을 변경할떄 사용
  @Entity
  @Table(name = "MBR")
  public class Member{
      
  }
  • catalog - 데이터베이스 ctalog 매핑
  • schema - 데이터 베이스 schema매핑
  • uniqueConstraints - DDL 생성 시에 유니크 제약 조건 생성

@Column

  • @Column(name = "name")
  • 속성
    • name - 필드와 매핑할 테이블의 컬럼이름
    • updatable - 등록,변경 가능 여부(default = true)
    • nullable - null값의 허용 여부 설정(DDL)

@Enumerated

  • JAva enum 타입을 매핑할 때 사용
  • @Enumerated(EnumType.xxxxx)
    • EnumType.STRING - 필수로 사용
    • EnumType.ORDINAL - 사용 권장하지 않음(이넘 타입이 변경 되었을때 값을 보장해 주지않음)

@Temporal

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

@Lab

  • 데이터베이스 BLOB, CLOB타입과 매핑
    • CLOB - String, char[], java.sql.CLOB
    • BLOB - byte[], javasql.BLOB

기본 키 매핑

@Id @GeneratedValue(strategy = GenerationType.AUTO)
private Long id;

@Id

  • 직접 할당 할때는 @Id만 사용

@GeneratedValue

  • 자동 생성

    • IDENTITY - 데이터베이스에 위임, MYSQL

      • 기본키 생성을 데이터베이스에 위임
      • 주로 MySQL,PostgreSQL, SQL server, DB2에서 사용
      • JPA는 보통 트랜잭션 커밋 시점에 INSERT SQL실행
      • AUTO_INCREMENT는 데이터베이스에 INSTERT SQL을 실행한 이후에 ID 값을 알 수 있음
      • IDENTITY전략은 em.persist()시점에 즉시 INSERT SQL실행 하고 DB에서 식별자를 조회
    Entity 
    public class Member { 
         @Id 
         @GeneratedValue(strategy = GenerationType.IDENTITY) 
         private Long id; 
    }
  • SEQUENCE - 데이터베이스 시퀀스 오브젝트 사용, ORACLE

    • @SequenceGenerator필요
    • 데이터베이스 시퀀스는 유일한 값을 순서대로 생성하는 특별한 데이터베이스 오브젝트
    • ORACLE, PostgreSQL, DB2, H2에서 사용
    • SEQUENCE 전략 - 매핑
      • name - 식별자 생성기 이름
      • sequenceName - 데이터베이스에 등록되어 있는 시퀀스 이름
      • initiaValue - DDL 생성 시에만 사용됨, 시퀀스 DDL을 생성할 때 처음 1 시작하는 수를 지정한다.
      • allocationSize - 시퀀스 한 번 호출에 증가하는 수
        • 성능 최적화에 사용됨, 데이터베이스 시퀀스 값이 하나씩 증가하도록 설정되어 있으면 이값을 바드시 1로 설정해야한다.
    @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; 
    }
  • TABLE - 키 생성용 테이블 사용, 모든 DB에서 사용

    • @TableGenerator필요
  • AUTO - 방언에 따라 자동 지정, 기본값

profile
hyunho

0개의 댓글