[JPA] 엔티티 매핑

hwarye·2023년 1월 2일
0

JPA

목록 보기
4/5

목차

  • @Entity
  • @Table
  • 데이터베이스 스키마 자동 생성
  • DDL 생성 기능
  • 기본 키 매핑

@Entity

📌 JPA를 사용해서 테이블과 매핑할 클래스에 필수로 붙여야 하는 어노테이션

  • @Entity 어노테이션이 붙은 클래스는 JPA가 관리하며 엔티티라 부른다.

🫧 속성

  • name
    : JPA에서 사용할 엔티티 이름 지정.
		@Entity(name : "지정할 엔티티 이름")
		default = 클래스 이름 그대로 사용.
		if) 다른 패키지에 이름이 같은 엔티티 클래스가 있으면 이름 지정해서 충돌하지 않도록 해야 한다.

🫧 주의사항

  • 기본 생성자 필수 (파라미터 없는 public / protected 생성자)
    => JPA가 엔티티 객체 생성 시 기본 생성자 사용하기 때문.
  • final 클래스, enum, interface, inner 클래스에는 사용할 수 없다.
  • 저장할 필드에 final을 사용하면 안된다.

@Table

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

  • 생략 시 -> 매핑한 엔티티 이름을 테이블 이름으로 사용.

🫧 속성

  • name
    : 매핑할 테이블 이름
		@Table(name : "매핑할 테이블 이름")
		default = 엔티티 이름
  • catalog
    : catalog 기능이 있는 데이터베이스에서 catalog를 매핑.

  • schema
    : schema 기능이 있는 데이터베이스에서 schema 매핑.

  • uniqueConstraints(DDL)
    : DDL 생성 시 유니크 제약조건 만들며, 2개 이상의 복합 유니크 제약 조건도 만들 수 있음.
    ➕ 스키마 자동생성 기능을 사용해 DDL을 만들 때만 사용.


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

  • JPA는 데이터베이스 스키마 자동 생성 기능 지원.
    -> 클래스 매핑 정보를 통해 어떤 테이블에 어떤 칼럼을 사용하는지 알 수 있음.
  • JPA는 매핑 정보와 데이터베이스 방언을 사용해 데이터베이스 스키마 생성.
  • 애플리케이션 실행 시점에 데이터베이스 테이블 자동 생성.
방언 : SQL 표준을 지키지 않거나 특정 데이터베이스만의 고유한 기능.
	-> 각 데이터베이스가 제공하는 SQL 문법과 함수가 조금씩 다르다.
	ex) 데이터 타입 중 가변 문자 타입 - MySQL에서는 VARCHAR, 오라클에서는 VARCHAR2.
	애플리케이션 개발자가 특정 데이터베이스에 종속되는 기능을 많이 사용하면 
    추후에 데이터베이스 교체가 어렵기 때문에,
    하이버네이트를 포함한 대부분의 JPA 구현체들은 이 문제를 해결하기 위해 데이터베이스 방언 클래스 제공.

persistence.xml

resources.META-INF.persistence.xml (스프링부트에서는 수동 생성)

<property name = "hibernate.hbm2ddl.auto" value="create" />

-> 이 속성 추가하면 애플리케이션 실행 시점에 데이터베이스 테이블 자동 생성.

persistence.xml

<property name = "hibernate.show_sql" value="true" />

-> 콘솔에 실행되는 테이블 생성 DDL 출력.

DDL (Data Definition Language)
: 데이터 정의어.
데이터 생성, 수정, 삭제 등 데이터의 전체적인 골격을 정하는 역할의 언어
ex) CREATE, ALTER, DROP(삭제), TRUNCATE(테이블 초기화)

DML (Data Manipulation Language)
: 데이터 조작어
테이블에 있는 행과 열을 조작하는 언어.
데이터베이스 사용자가 저장된 데이터를 실질적으로 처리하는 데에 사용하는 언어.
ex) INSERT, UPDATE, DELETE(데이터 삭제)

DCL (Data Control Language)
: 데이터 제어어
데이터베이스에 접근 권한 관련 언어.
데이터 제어 언어.
데이터의 보안, 무결성, 회복 등을 정의하는 데에 사용.
ex) GRANT(특정 작업에 대한 수행 권한 부여), REVOKE(특정 작업에 대한 권한 박탈, 회수)
    
DQL (Data Query Language)
정해진 스키마 내에서 쿼리할 수 있는 언어.
DQL을 DML의 일부분으로 취급하기도 한다.
ex) SELECT

TCL (Transaction Control Language)
DML을 거친 데이터의 변경 사항 수정 가능한 언어.
ex) COMMIT(DML이 작업한 내용 데이터베이스에 커밋, 트랜잭션 작업이 정상적으로 완료되었음을 관리자에게 알림), 
	ROLLBACK(커밋했던 내용 다시 롤백, 트랜잭션의 작업이 비정상적으로 종료되었을 때 원래 상태로 복구)


🟡 Spring Boot

application.yml에서 처리.
ddl-auto : create => 스키마 자동 생성
show-sql : true => SQL 쿼리 출력


DDL 생성 기능

스키마 자동 생성하기를 통해 만들어지는 DDL에 제약 조건 추가 가능.
ex)

@Column(name = "NAME", nullable = false, length = 10)

이런 기능은 DDL 자동 생성 시에만 사용되고, JPA의 실행 로직에는 영향을 주지 않는다.
-> DDL을 직접 만들 경우, 필요 ❌.


기본 키 매핑


cf)
https://cbw1030.tistory.com/71

profile
례코드

0개의 댓글