반응형

📝엔티티 매핑 관련 어노테이션

@Entity
@Table(name = "MBR")
public class Member {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY) // IDENTITY 전략
    // @GeneratedValue(strategy = GenerationType.SEQUENCE) // SEQUENCE 전략
    @Column(name="member_id")
    private Long id;

    private String name;
    private int age;
    private String address; // 필드만 추가해주면 끝

    // @Enumerated(EnumType.ORDINAL) // enum 타입 매핑 [숫자] (금지)
    @Enumerated(EnumType.STRING) // enum 타입 매핑 [문자] (사용 OK)
    private CategoryEnum name;

    // 날짜 타입 매핑 [아래 LocalDateTime을 쓰면 알아서 YYYYMMDDHHMMSS 설정]
    @Temporal(TemporalType.DATE) 
    private Date date;
    
    private LocalDateTime createDate
    
    @Lob // BLOB, CLOB 매핑
    private String description;
    
    @Transient
    private int temp;
}
  • @Entity
    • JPA에서 영속성 컨텍스트가 관리할 테이블이라는 의미이다.
    • 기본생성자 필수 (JPA에서 내부적으로 리플렉션 등을 사용하기 때문에)
  • @Table
    • DB 테이블명하고 엔티티 이름이 다를 때 매핑 가능
  • @Column
    • DB 필드에 사용할 이름이나 제약조건 가능 (nullable, length 등...)
  • @Id
    • 해당 필드를 PK로 지정하겠다는 의미이다.
  • @GeneratedValue
    • PK AutoIncrement설정이다. IDENTITY로 설정할지 SEQUENCE로 지정할지 정할 수 있다.
      MySQL AutoIncrement로 설정한 경우 INSERT하기 전까지 PK의 값을 모르기 때문에 예외적으로 persist시 바로 flush가 되어 DB에 저장되며 PK값을 가져온다. 그렇기 때문에 벌크 INSERT가 JPA로는 힘들다. (JDBC 네이티브 쿼리로 가능)
  • @Enumerate
    • DB에서는 varchar형태로 만들어지는 Enum Type
    • ORDINAL 사용 X → 순서를 DB에 저장해서 0, 1 이렇게 저장되기 때문에 맨앞에 0에 해당하는 PineApple이란 걸 추가하면 기존 0에 해당하는 Apple로 저장되어있던 데이터들이 같이 변경되지도 않기 때문에 Apple로 저장되어있는 0이 PineApple인 0이 되어버린다.
  • @Temporal
    • 날짜 필드라는 걸 알리는 의미이다.
    • LocalDate, LocalDateTime을 쓰는 경우 Temporal이 알아서 적용된다.
  • @Lob
    • BLOB, CLOB타입이라는 걸 알리는 의미이다.
  • @Transient
    • DB 필드에 매핑시키지 않고 메모리에서만 사용

 

📝DDL 설정

hibernate설정으로 자동적으로 엔티티에 매핑되는 테이블을 생성하거나 할 수 있고 방언 설정으로 다양한 RDBMS에 맞는 SQL로 변환되어서 실행된다. [운영 장비에는 절대 create, create-drop, update 사용하면 안된다.]

 

 

hibernate.hbm2ddl.auto

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

 

 

 

🔗 참고 및 출처

https://www.inflearn.com/course/ORM-JPA-Basic

반응형