[JPA] 엔티티 매핑 – 객체와

엔티티 매핑

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

2) 필드 및 열 매핑: @Column

3) 기본 키 매핑: @Id

4) 연관 매핑: @ManyToOne, @JoinColumn

개체 및 테이블 매핑

@법인인

@Entity 주석이 달린 클래스는 JPA에서 관리하며 엔티티라고 합니다.

JPA를 사용하여 테이블에 매핑하려는 클래스에는 @Entity가 필요합니다.

(힌트)

1) 기본 생성자 필요(매개 변수가 없는 공개 또는 보호 생성자)

2) 최종 클래스, 열거형, 인터페이스 또는 inuuer 클래스를 사용하지 마십시오.

3) 저장할 필드에 final 키워드를 사용하지 마십시오.

속성 – 이름

JPA에서 사용할 엔티티 이름을 지정합니다.

기본적으로 클래스 이름이 사용됩니다.

동일한 클래스 이름이 없으면 가능한 한 기본값을 사용하십시오.

@테이블

엔터티와 연결할 테이블을 지정합니다.

속성 – 이름

매핑할 테이블 이름 Entity 이름이 기본값으로 사용됩니다.

속성 – 카탈로그

데이터베이스 카탈로그 매핑

속성 체계

데이터베이스 스키마 매핑

속성 – uniqueConstraints(DDL)

DDL 생성에 대한 고유한 제약 조건 생성

데이터베이스에서 자동으로 스키마 생성

DDL은 테이블 지향에서 객체 지향으로 응용 프로그램 실행 시 자동으로 생성됩니다.

데이터베이스 언어를 사용하여 데이터베이스에 적합한 DDL을 생성하십시오.

(방언: limit, mysql 및 oracle의 rownum)

이렇게 생성된 DDL은 개발 기기에서만 사용됩니다.

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

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

동면. hbm2ddl.자동으로 (자동 옵션)

pom.xml

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

옵션 – 생성

기존 테이블을 삭제하고 다시 생성(DROP + CREATE)

옵션 – 생성-삭제

create와 같은 방법이지만 마지막에 테이블을 DROP합니다.

옵션 – 업데이트

변경사항만 반영합니다(운영 DB에서는 절대 사용하지 않음).

옵션 – 유효성 검사

엔터티와 테이블이 제대로 매핑되어 있는지 확인합니다.

옵션 – 없음

위의 4가지 값이 아니면 모두 의미가 없는 값이지만 명시적으로 없음으로 표현됩니다.

데이터베이스 스키마 자동 생성 – 주의 사항

생산 시스템에서 생성, 생성-삭제 또는 업데이트를 사용하지 마십시오.

초기 개발 단계: 생성, 업데이트

테스트 서버: 업데이트, 유효성 검사

프로비저닝, 운영 서버: 검증, 없음

DDL 생성 기능

제약 조건 추가 : 회원명은 필수 항목으로 10자를 초과할 수 없습니다.

@Column(nullable = false, length = 10)

고유성 제약 조건 추가

@Table(uniqueConstraints = {@UniqueConstraint(name = "NAME_AGE_UNIQUE", columnNames = {"NAME","AGE"})})

DDL 생성 기능은 DDL을 자동으로 생성할 때만 사용되며 JPA 실행 로직에는 영향을 미치지 않는다.

필드 및 열 매핑

예) 요건

1) 회원은 일반회원과 임원으로 구분한다.

2) 회원가입일자와 개정일자를 반드시 기재하여야 합니다.

3) 멤버를 기술할 수 있는 필드가 있어야 합니다.

필드에는 길이 제한이 없습니다.

import javax.persistence.*;
import java.util.Date;

@Entity
public class RemindMember {

    @Id
    private Long id;
    @Column(name = "name")
    private String username;
    private Integer age;
    @Enumerated(EnumType.STRING)
    private RoleType roleType;
    @Temporal(TemporalType.TIMESTAMP)
    private Date createDate;
    @Temporal(TemporalType.TIMESTAMP)
    private Date lastModifiedDate;
    @Lob
    private String description;
    
}

요건 1) 열거형 RoleType으로 Member와 ADMIN을 분류합니다.

@열거및 속성 값 열거 유형 STRING여기서 사용, EnumType.String 옵션 사용해야한다.

EnumType.ORDINAL 새로운 열거형을 추가할 때 사용하면 재정렬로 인한 치명적인 데이터 오류제공 할 수 있습니다

요건 2)는 createDate와 lastModifiedDate는 Date 타입으로 선언하고 @Temporal을 주석으로 사용한다.

@Temporal은 날짜 유형을 매핑합니다.

때 사용

요건 3)@칭찬 주석, 이러한 주석은 블롭, 블롭 지도

매핑 주석 정리

@나뉘다 : DB의 테이블과 컬럼을 매핑합니다.

@일시적인 : 날짜 유형을 매핑합니다.

@열거 : 열거 유형을 매핑합니다.

@칭찬 : BLOB 및 CLOB를 매핑합니다.

@과도 현상 : 열을 특정 필드에 매핑하지 마십시오. (매핑 무시)

@Column의 속성

속성 – 이름

개체의 필드 이름을 테이블의 열 이름으로 사용하여 필드 및 기본값에 매핑합니다.

속성 – 삽입 가능, 업데이트 가능

가능한 경우 레지스트리 변경, 기본값: TURE

속성 – null 허용(DDL)

null 허용 여부를 지정합니다.

false로 설정하면 DDL을 생성할 때 not null 제약 조건이 추가됩니다.

속성 – 열 정의(DDL)

데이터베이스 열 정보를 직접 지정할 수 있습니다.

예) varchar(1000) 기본 ‘EMPTY’

필드의 Java 유형 및 방언 정보를 사용하여 기본값을 설정하십시오.

속성 – 길이(DDL)

문자열 유형에만 사용되는 문자 길이 제한입니다.

기본값은 255입니다.

속성 – 정확도, 스케일링(DDL)

BigDecimal 유형에서 사용됩니다.

BigInteger도 사용할 수 있습니다.

Precision은 소수점을 포함한 총 자릿수이고 scale은 소수 자릿수입니다.

Dobule 및 Float 유형에는 적용되지 않습니다.

매우 큰 숫자나 정확한 소수를 다룰 때 사용됩니다.

기본 정밀도 = 19, 배율 = 2

@열거

Java 열거 유형을 매핑할 때 사용됩니다.

이미 언급한 바와 같이, ORDINAL을 사용하지 마십시오.

속성 값

열거형 서수 : 열거 순서를 데이터베이스에 저장합니다.

열거형. 끈 : 열거형 이름을 데이터베이스에 저장합니다.

기본적으로 EnumType.ORDINAL을 사용하기 때문에 STRING 사용해야한다.

@일시적인

날짜 유형(java.util.Date, java.util.Calendar)을 매핑할 때 사용됩니다.

참고로 LocalDate나 LocalDateTime을 사용하는 경우 생략할 수 있습니다.

(최신 Hibernate에서 지원)

속성 값

TemporalType.DATE: 날짜, 데이터베이스 날짜 유형 및 매핑 예) 2023-02-26

임시 유형.시간: 시간, 데이터베이스 시간 유형 및 매핑, 예: 나.) 00:12:45

임시 유형.TIMESTAMP : 날짜 및 시간, 데이터베이스 타임스탬프 유형 및 매핑, 예: 나.) 2023-02-26 0:12:45

@칭찬

데이터베이스 BLOB, CLOB 유형 및 매핑

@칭찬지정할 수 있는 속성이 없습니다.

매핑할 필드 유형이 문자이면 CLOB 매핑, 그렇지 않으면 BLOB 매핑

클롭 : 문자열, char(), java.sql.CLOB

얼룩 : 바이트(), java.sql.BLOB

@과도 현상

필드가 매핑되지 않은 경우 사용됩니다.

데이터베이스에서 저장되거나 검색되지 않습니다.

일시적으로 메모리에만 값을 저장하고 싶을 때 주로 사용합니다.