Spring

엔티티 매핑

codingtori 2025. 3. 30. 22:59

JPA : 엔티티와 테이블을 정확히 매핑하는 것

 

@Entity

: JPA를 사용해서 테이블과 매핑할 클래스

이 어노테이션이 붙으면 JPA가 관리함, 엔티티라고 부름

속성

  name :: 엔티티 이름

주의 사항

● 기본 생성자 필수

● final, enum, interface, inner 클래스에 사용 불가

● final 사용 불가능

 

@Table

: 엔티티와 매핑할 테이블 지정

속성

  name :: 테이블 이름

  catalog :: catalog 기능

  schema :: schema 기능

  uniqueConstraints(DDL) :: DDL 생성 시 유니크 제약조건

 

 

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

: JPA는 클래스의 매핑 정보와 데이터베이스 방언을 사용하여 데이터베이스 스키마 생성

//애플리케이션 실행 시점에 데이터베이스 테이블을 자동으로 생성
<property name="hibernate.hbm2ddl.auto" value="create" />

 

이때 "hibernate.show_sql" 속성을 true로 설정하면 콘솔에 실행되는 테이블 생성 DDL 출력

 

hibernate.hbm2ddl.auto 속성

  create :: 기존 테이블 삭제 + 새로 생성 (DROP + CREATE)

  create-drop :: create 속성에 추가로 애플리케이션 종료시 생성 DDL 제거 (DROP + CREATE + DROP)

  update :: 데이터베이스 테이블과 엔티티 매핑정보를 비교해서 변경사항만 수정

  validate :: 데이터베이스 테이블과 엔티티 매핑정보 비교시 차이가 있으면 경고를 남기고 애플리케이션 미실행. DDL 수정안함

  none :: 자동생성기능 사용안할 때 사용

 

 

DDL 생성기능

  nullable 속성 값 : not null 제약조건 추가 가능 @Column의 nullable = true (Default)

  length 속성 : DDL에 문자의 크기 지정 가능 @Column의 length = NUM

  유니크 제약조건 : @TaBle의 uniqueConstraints = {@UniqueConstraint(~

 

기본 키 매핑

  직접 할당 : 기본 키를 애플리케이션에서 직접 할당

    @Id로 매핑하면 됨

    em.persist()를 호출하기 전에 애플리케이션에서 직접 식별자 값을 할당해야함. 식별자 값이 없으면 예외 발생

  자동 생성 : 대리키 사용 방식

    ○ IDENTITY : 기본 키 생성을 데이터베이스에 위임 (mysql, postgresql, sql server, db2)

       데이터베이스에 엔티티를 저장해서 식별자 값을 획득한 후 영속성 컨텍스트에 저장

      → 엔티티를 데이터베이스에 저장해야 식별자를 구할 수 있음 트랜젝션 지원 X

    ○ SEQUENCE : 데이터베이스 시퀀스를 사용해서 기본 키 위임 (oracle, postgresql, db2, h2)  - @SequenceGenerator

       데이터베이스 시퀀스에서 식별자 값을 획득한 후 영속성 컨텍스트에 저장

** identity 방식과 sequence 방식의 차이 **

identity 방식은 데이터베이스에 먼저 저장한 후 식별자 조회후 할당, sequence 방식은 식별자 조회 후 할당 후 데이터베이스에 저장

    ○ TABLE : 키 생성 테이블 사용 - @TableGenerator

       데이터베이스 시퀀스 생성용 테이블에서 식별자 값을 획득한 후 영속성 컨텍스트에 저장

       테이블 전략은 시퀀스 대신에 테이블을 사용한다는 것만 제외하면 SEQUENCE 전략과 내부 동작방식이 같음

 

: 사용하려면 persistence.xml에 `hibernate.id.new_generator_mapping=true` 속성 반드시 추가

* 여러가지 방법이 있는 이유 : 데이터 베이스 벤더마다 지원하는 방식이 다름

 

자연 키보다는 대리 키의 사용이 더 좋다! 따라서, 대리 키를 기본 키로 사용하되 주민등록번호나 이메일 등 자연 키의 후보가 되는 칼럼들은 필요에 따라 유니크 인덱스를 설정해서 사용

 

@Enumerated

자바의 enum 타입을 매핑할 때 사용

  EnumType.ORDINAL : enum 순서를 데이터베이스에 저장

  EnumType.STRING : 이름을 데이터베이스에 저장

enum RoleType {
	ADMIN, USER
}

@Enumerated(EnumType.STRING)
private RoleType roleType;

//사용
member.setRoleType(RoleType.ADMIN);

 

@Temporal

: 날짜 타입 (java.util.Date, java.util.Calendar)을 매핑 시 사용

  TemporalType.Date : 날짜, 데이터베이스 date 타입과 매핑

  TemporalType.TIME : 시간, 데이터베이스 time 타입과 매핑

  TemporalType.TIMESTAMP : 날짜와 시간, 데이터베이스 timestamp 타입과 매핑

이를 생략하면 자바의 Date와 가장 유사한 timestamp로 정의됨

 

datetime: mysql / timestamp: H2, oracle, PostgreSQL

 

 

@Access

: JPA가 엔티티 데이터에 접근하는 방식 지정

  필드 접근 : AccessType.FIELD로 지정. 필드에 직접 접근함. 필드 접근 권한이 private여도 접근 가능

  프로퍼티 접근 : AccessType.PROPERTY로 지정. 접근자(Getter) 사용

설정하지 않으면 @Id의 위치를 기준으로 접근방식 설정

필드 접근 방식과 프로퍼티 접근 방식을 함께 사용할 수 있다.


1️⃣ pom.xml - Maven 프로젝트의 설정 파일

: Maven 프로젝트에서 사용하는 핵심 설정 파일

 

✔ pom.xml 역할

  • 프로젝트 이름, 버전, 개발자 정보 등의 메타데이터 관리
  • 프로젝트에서 사용하는 라이브러리(의존성, dependencies) 관리
  • 컴파일, 테스트, 패키징 등 빌드 관련 설정
  • 플러그인을 설정해서 추가적인 기능을 제공

✅ mvn package 같은 명령어를 실행하면 pom.xml에 따라 프로젝트가 빌드됨

 

2️⃣ clean.sh - 셸 스크립트 파일 (Linux/macOS)

clean.sh는 셸 스크립트(Shell Script) 파일로, 프로젝트의 빌드 및 캐시 파일을 정리(clean)하는 역할
일반적으로 sh clean.sh 또는 ./clean.sh 명령어로 실행


출처

https://product.kyobobook.co.kr/detail/S000000935744

 

자바 ORM 표준 JPA 프로그래밍 | 김영한 - 교보문고

자바 ORM 표준 JPA 프로그래밍 | 자바 ORM 표준 JPA는 SQL 작성 없이 객체를 데이터베이스에 직접 저장할 수 있게 도와주고, 객체와 관계형 데이터베이스의 차이도 중간에서 해결해준다. 이 책은 JPA

product.kyobobook.co.kr

 

 

 

'Spring' 카테고리의 다른 글

연관관계 매핑(1)  (0) 2025.04.05
내 첫 스프링 CRUD 만들기  (0) 2025.04.04
이펍 세미나(1)  (0) 2025.04.01
영속성 관리  (1) 2025.03.22
JPA 프로그래밍  (1) 2025.03.16