[SpringBoot] 엔티티 매핑

·2023년 9월 9일

엔티티 매핑

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

@Entity

@Entity가 붙은 클래스는 JPA가 관리하게 되고 엔티티라고 부르고, JPA를 사용해서 테이블과 매핑할 클래스는 @Entity를 필수로 붙여 주어야 한다. 여기서 주의할 점은 다음과 같다.

  • 기본 생성자 필수 (파라미터가 없는 public 또는 protected 생성자)
  • final 클래스, enum, interface, inner 클래스 사용 X
  • 저장할 필드에 final 사용 X

속성: name

  • JPA에서 사용할 엔티티 이름을 지정한다.
  • 기본값: 클래스 이름을 그대로 사용한다.
    —> 같은 클래스 이름이 없으면 가급적 기본값을 사용한다.

@Table

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

  • DDL을 애플리케이션 실행 시번에 자동 생성한다,

  • 테이블 중심 —> 객체 중심

  • 데이터베이스 방언을 활용해서 테이터베이스에 맞는 적절한 DDL을 생성한다.

  • 이렇게 생성된 DDL은 개발 장비에서만 활용하고 운영에서는 활용을 잘 하지 않는다.

  • 생성된 DDL은 운영서버에서는 사용하지 않거나, 적절히 다듬은 후 사용한다.

    주의점

  • 운영 장비에는 절대 create, create-drop, update 사용하면 안된다. (db없어지면 안되서)

  • 개발 초기 단계는 create 또는 update

  • 테스트 서버는 update 또는 validate

  • 스테이징과 운연 서버는 validate또는 none

DDL 생성 기능

  • 제약조건 추가: ex) 회원 이름은 필수, 10자 초과X —> @Column(nullable = false, length = 10)
  • 유니크 제약조건 추가
  • DDL 생성 기능은 DDL을 자동 생성할 때만 사용되고 JPA의 실행 로직에는 영향을 주지 않는다.

필드와 컬럼 매핑


여기서 @Transient는 DB에 넣지 않고 메모리에서만 사용하고 싶을 때 사용한다.

@Column의 unique속성은 운영에서 사용하기 어려워 @Table(uniqueConstrints~)를 선호한다.

ORDINAL을 사용하게되면 enum을 수정하였을때, DB에서 이미 담겨있는 값과 헷갈릴 수 있다.

기본 키 매핑 어노테이션

  • @Id
  • @GeneratedValue;

기본 키 매핑 방법으로는 @Id를 사용하여 직접 할당을 하게 된다. 자동 생성 방법은 다음과 같다.

  • IDENTITY: 데이터베이스에 위임, MYSQL
  • SEQUENCE: 데이터베이스 시퀀스 오브젝트 사용, ORACLE
  • @SequenceGenerator 필요
  • TABLE: 키 생성용 테이블 사용, 모든 DB에서 사용
  • @TableGenerator 필요
  • AUTO: 방언에 따라 자동 지정, 기본값

IDENTITY 전략의 특징을 살펴보면, 기본 키 생성을 데이터베이스에 위임을 한다. 주로 MySQL, PostgreSQL, SQL Server, DB2에서 사용을 하며 JPA는 보통 트랜잭션 커밋 시점에 INSERT SQL 실행을 한다. AUTO_ INCREMENT는 데이터베이스에 INSERT SQL을 실행한 이후에 ID 값을 알 수 있으며,IDENTITY 전략은 em.persist() 시점에 즉시 INSERT SQL 실행하고 DB에서 식별자를 조회한다.

SEQUENCE 전략의 특징을 살펴보면, 데이터베이스 시퀀스는 유일한 값을 순서대로 생성하는 특별한
데이터베이스 오브젝트로 오라클, PostgreSQL, DB2, H2 데이터베이스에서 사용한다.

기본 키 매핑 어노테이션

  • @Id
  • @GeneratedValue;

기본 키 매핑 방법으로는 @Id를 사용하여 직접 할당을 하게 된다. 자동 생성 방법은 다음과 같다.

  • IDENTITY: 데이터베이스에 위임, MYSQL
  • SEQUENCE: 데이터베이스 시퀀스 오브젝트 사용, ORACLE
  • @SequenceGenerator 필요
  • TABLE: 키 생성용 테이블 사용, 모든 DB에서 사용
  • @TableGenerator 필요
  • AUTO: 방언에 따라 자동 지정, 기본값

IDENTITY 전략의 특징을 살펴보면, 기본 키 생성을 데이터베이스에 위임을 한다. 주로 MySQL, PostgreSQL, SQL Server, DB2에서 사용을 하며 JPA는 보통 트랜잭션 커밋 시점에 INSERT SQL 실행을 한다. AUTO_ INCREMENT는 데이터베이스에 INSERT SQL을 실행한 이후에 ID 값을 알 수 있으며,IDENTITY 전략은 em.persist() 시점에 즉시 INSERT SQL 실행하고 DB에서 식별자를 조회한다.

SEQUENCE 전략의 특징을 살펴보면, 데이터베이스 시퀀스는 유일한 값을 순서대로 생성하는 특별한
데이터베이스 오브젝트로 오라클, PostgreSQL, DB2, H2 데이터베이스에서 사용한다.

profile
고민0

0개의 댓글