Zayson
A to Zayson!
Zayson
전체 방문자
오늘
어제
  • 분류 전체보기 (132)
    • Computer Science (20)
      • Network (4)
      • DB (12)
      • OS (4)
    • Algorithm (32)
      • 완전탐색(Brute-Force) (3)
      • 그리디(Greedy) (6)
      • 투포인터(Two-Pointer) (1)
      • 그래프(Graph) (5)
      • BFS & DFS (9)
      • 구현, 시뮬레이션(Implementation) (5)
      • 다이나믹 프로그래밍(DP) (3)
    • Backend (51)
      • Spring Boot (19)
      • JPA (16)
      • Kafka (2)
      • Java (13)
      • Kotlin (1)
    • DevOps (1)
      • Jenkins (5)
      • Oracle Cloud Infrastructure (1)
      • Kubernetes & Docker (1)
    • Trouble Shooting (3)
      • JPA (1)
      • Spring Boot (2)
    • 회고 (5)
      • 엔빵 프로젝트 포스트 로드맵 (1)
      • 2022년 (4)
    • Kafka (7)
      • Kafka (5)
      • Kafka Connect (2)
    • 기술 서적 (6)
      • 데이터 중심 애플리케이션 설계 (3)
      • 개발자가 반드시 정복해야할 객체 지향과 디자인 패턴 (2)
      • 가상 면접 사례로 배우는 대규모 시스템 설계 기초 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

인기 글

태그

  • BFS
  • 구현
  • 라이브스터디
  • Java
  • kafka
  • 프로그래머스
  • Kafka Connect
  • Computer science
  • SpringBoot
  • 백준
  • JPA
  • 나 혼자 스프링부트!
  • Backend
  • 관계형 데이터베이스 실전 입문
  • spring boot
  • 엔빵프로젝트
  • dfs
  • 그리디
  • CS
  • 완전탐색

최근 글

티스토리

hELLO · Designed By 정상우.
Zayson

A to Zayson!

객체와 테이블 매핑,  @Entity, @Table
Backend/JPA

객체와 테이블 매핑, @Entity, @Table

2022. 4. 19. 00:36

@Entity

JPA는 객체와 실제 DB 테이블 매핑을 @Entity 애노테이션을 이용해 매핑한다. @Entity 애노테이션은 JPA가 관리하는 엔티티이며 테이블과 매핑된다.

@Entity가 붙은 엔티티 클래스는 public, protected 접근 제어자가 붙은 기본 생성자가 필수로 필요하다.

public class Member {
    public Member() {...}
    protected Member() {...}
}

또한, final 클래스, interface, enum, inner 클래스에는 사용이 불가능하며, DB와 매핑되는 컬럼들은 final 키워드를 사용하면 안된다.

@Entity 아래의 경우 붙일 수 없음

1. public final class Member {...}
2. public interface Member {...}
3. public enum Member {...}
4. public class Member { 
        @Entity
        class InnerMember {...}
     }

public class Member {
        private final Integer age;  // 필드에 final 사용 불가
}

@Entity의 프로퍼티 중 name은 JPA에서 사용할 엔티티 이름을 지정하는 속성이다. 일반적으로 테이블 이름과 동일하게 엔티티 클래스명을 사용하고, 규약에 따라 name을 통해 변경하는 방식을 선택한다

 

@Table

@Table 애노테이션은 엔티티와 매핑할 테이블을 지정한다.

name 프로퍼티는 기본적으로 엔티티 이름과 매핑되는 테이블을 사용한다.

uniqueConstraints는 DDL 생성 시 유니크 제약조건을 생성할 수 있는데, @Column 애노테이션의 unique의 속성으로 지정할 경우 제약조건 이름이 랜덤하게 지정되기 때문에 일반적으로 @Table 애노테이션 에서 제약조건을 지정한다.

@Entity
@Table(name = "MEMBERS")   //MEMBERS 테이블과 매핑된다.
public class Member { ... }

 

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

개발 단계, 로컬에서 개발 하는 경우에 주로 지정하며 애플리케이션 로딩 시점에 DDL(Create 문)을 자동 생성하게 해준다.

<property name="hibernate.hbm2ddl.auto" value="create" /> value 부분에 각각의 속성을 지정해서 사용할 수 있다.

  1. create : 애플리케이션 로딩 시에 먼저 Table drop DDL을 실행한 후 Create Table DDL을 실행한다.
  2. create-drop : 애플리케이션 로딩 시 Table Drop and Create을 실행하는 점은 “create” 속성과 동일하지만, create-drop은 애플리케이션 종료 시점에 다시 Table을 Drop한다. 테스트 환경에서 많이 사용된다.
  3. update : 애플리케이션 로딩 시점에 기존에 존재하는 테이블을 Drop 하지 않고 테이블의 변경 내역에 대해서만 Update 해주는 방식이다. Alter Table을 이용해 테이블의 변경 내역을 반영한다. 변경 내역의 반영 중 컬럼을 추가하는 것은 가능하지만 컬럼을 삭제하는 것에 대해서는 지원하지 않는다.
  4. validate : 엔티티와 테이블을 정상적으로 매핑 하는지 확인하는 방식으로, 정상적으로 맵핑되지 않은 경우 SchemaManagementException 발생시킨다.

 

📄 References

김영한님의 자바 ORM 표준 JPA 프로그래밍 - 기본편 : https://www.inflearn.com/course/ORM-JPA-Basic/dashboard

반응형
저작자표시 (새창열림)

'Backend > JPA' 카테고리의 다른 글

다양한 연관관계 매핑  (0) 2022.05.02
단방향, 양방향 매핑  (0) 2022.04.26
기본키 매핑, @Id, @GeneratedValue  (0) 2022.04.19
필드와 컬럼 매핑, @Column  (0) 2022.04.19
영속성 관리, 영속성 컨텍스트  (0) 2022.04.18
    'Backend/JPA' 카테고리의 다른 글
    • 단방향, 양방향 매핑
    • 기본키 매핑, @Id, @GeneratedValue
    • 필드와 컬럼 매핑, @Column
    • 영속성 관리, 영속성 컨텍스트
    Zayson
    Zayson
    공부한 내용을 정리하는 공간

    티스토리툴바