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 |