[Spring Boot] 엔티티 매핑 소개

hyun-jin·2022년 12월 5일
0

SpringBoot

목록 보기
5/6

✨엔티티 매핑 소개

  • 객체와 테이블 매핑 : @Entity, @Table
  • 필드와 컬럼 매핑 : @Column
  • 기본 키 매핑 : @Id
  • 연관관계 매핑 : @ManyToOne, @JoinColumn

📌 1. 개체와 테이블 매핑

1-1. @Entity

  • @Entity가 붙은 클래스는 JPA가 관리한다.
  • JPA를 사용하여 테이블과 매핑할 클래스는 @Entity 필수
  • 기본 생성자 필수

✔️ 주의
- enum, interface 클래스 엔티티 사용 불가
- 저장할 필드(전역변수)에 final 사용 불가

  • 속성 : name
    - JPA에서 사용할 엔티티 이름을 지정한다.
    - 기본값을 쓸것을 권장

1-2. @Table

  • 엔티티와 매핑할 테이블 지정
  • 속성
    - name : 매핑할 테이블 이름
    - catalog : 데이터베이스 catalog 매핑
    - schema : 데이터베이스 schema 매핑
    - DDL(uniqueConstraints) : DDL 생성 시에 유니크 제약 조건 생성



📌 2. 데이터베이스 자동 생성

  • DDL을 애플리케이션 실행 시점에 테이블 자동 생성
  • 테이블 중심 -> 객체 중심
  • 데이터베이스 방언을 활용해서 데이터베이스에 맞는 적정한 DDL 생성

    ✔️persistence.xml을 만들어 sql 방언을 위한 코드를 넣어줌(Oracle 데이터베이스 사용중)



📌 3. hibernate.hbm2ddl.auto 옵션

  • 데이터베이스 스키마 자동생성 옵션
  • create : 기존 테이블 삭제 후 다시 생성(drop + create)
  • create-drop : create와 같으나 종료시점에 테이블 drop
  • update : 변경분만 반영
  • validate : 엔티티와 테이블이 정상 매핑되었는지만 확인
  • none : 사용하지 않음



📌 4. 제약조건 추가

ex)회원이름 필수, 길이는 10자

  • @Column(nullable = false, length = 10)
  • @Temporal : 날짜 타입 매핑
  • @Enumerated : enum 타입 매핑
  • @Lob : BLOB, CLOB 매핑
  • @Transient : 특정 필드를 컬럼에 매핑하지 않음



📌 5. @Column

  • name : 필드와 매핑할 테이블의 컬럼 이름
  • null : null값의 허용 여부 설정
  • unique : 한 컬럼에 대해 unique하게 제약조건을 걸때 사용
  • length : 문자 길이 제약조건, String 타입에만 사용
    @Column(unique = true, length = 10)	//false로 설정하면 not null 제약조건 붙는다.
    private String name;



📌 6. 기본 키 매핑

  • @Id <- 직접 할당
  • @GeneratedValue

6-1. @GeneratedValue

  • 자동생성 -> 전략
    -> identity : 데이터베이스에 위임
    -> sequence : 데이터베이스 시퀀스 오브젝트 사용
    @SequenceGenerator 필요
    -> table : 키 생성용 테이블 사용, 모든 DB에서 사용
    @TableGenerator
    -> auto : 방언에 따라 자동 지정, 기본값

6-1-1. @SequenceGenerator

-> name : 식별자 이름
-> sequenceName : 데이터베이스 등록되어 있는 시퀀스 이름
(hibernate_sequence)
-> initialValue : 시퀀스 DDL을 생성할때 처음 시작하는 수 지정
-> allocationSize : 데이터베이스 시퀀스 값이 하나씩 증가하도록 설정(이 값을 1로 설정)
-> catalog, schema : 데이터베이스 catalog, schema 이름 설정

0개의 댓글