엔터티 매핑 소개
- 개체 및 테이블 매핑: @엔티티, @테이블
- 필드 및 열 매핑: @나뉘다
- 기본 키 매핑: ID
- 연관 매핑: @ManyToone, @JoinColumn
개체 및 테이블 매핑
- @법인인
- @Entity로 표시된 클래스는 JPA에서 엔터티라고 합니다.
- JPA에는 테이블과 매퍼 클래스가 있습니다.
@법인인 주석 필요 - 주의
- 기본 생성자 필요(매개변수가 없는 공개 또는 보호 생성자)
- 최종 클래스, 열거형, 인터페이스 내부 클래스 X 사용
- X를 저장할 필드에 finasl 사용
- 속성: 이름
- JPA에서 사용할 엔터티 이름을 지정합니다.
- 기본값: 클래스 이름을 있는 그대로 사용(예: Member)
- 동일한 클래스 이름이 없으면 가능한 한 기본값을 사용하십시오.
- JPA에서 사용할 엔터티 이름을 지정합니다.
- @Entity로 표시된 클래스는 JPA에서 엔터티라고 합니다.
- @테이블
- @Table은 엔터티와 연결할 테이블을 지정합니다.
- @Table은 엔터티와 연결할 테이블을 지정합니다.
데이터베이스 스키마 자동 생성
- 애플리케이션 실행 시 자동으로 DDL 생성
- 테이블 중심 -> 객체 중심
- 데이터베이스 언어를 사용하여 데이터베이스에 적합한 DDL 생성
- 이렇게 생성된 DDL은 개발 시스템에서만 사용됩니다.
- 생성된 DDL은 운영 서버에서 사용되지 않거나 적절히 정리된 후 사용됩니다.
- persistence.xml에서 속성 DDL 옵션을 확인하십시오.
- 데이터베이스 스키마 자동 생성에 대한 참고 사항
- 프로덕션 장치에서 생성, 생성-삭제 또는 업데이트를 사용하지 마십시오.
- 개발 초기 단계에서 빌드 또는 업데이트
- 테스트 서버 업데이트 또는 유효성 검사
- 스테이징 및 프로덕션 서버는 validdate 또는 none입니다.
- 웹어플리케이션 DB 계정에 대한 별도의 권한(변경, 삭제…)
- DDL 생성 기능
- 제한 사항 추가: 회원 이름 필수, 10자 이상 X
- @Column(널링 가능 = 거짓, 길이 = 10)
- 고유성 제약 조건 추가
- @Table(uniqueConstraints = {@UniqueConstraint( name = “NAME_AGE_UNIQUE”, columnNames = {“NAME”, “AGE”} )})
- 제한 사항 추가: 회원 이름 필수, 10자 이상 X
필드 및 열 매핑
- 나뉘다
기본 키 매핑
- 직접 할당: @id만
- 자동 생성(@GeneratedValue)
- 신원 : 데이터베이스, MYSQL에 위임
- 순서 : 데이터베이스 시퀀스 객체 사용, ORACLE
- @SequenceGenerator 필요
- 테이블 : 모든 DB에서 사용되는 키 생성을 위한 테이블 사용
- @TableGenerator 필요한
- 자동차 : 방언에 따라 자동으로 할당, 기본값
- 신원
- 기본 키 생성을 데이터베이스에 위임
- 주로 MySQL, PostgreSQL, SQL Server, DB2에서 사용(예: MySQL의 AUTO_INCREMENT)
- JPA는 일반적으로 트랜잭션 커밋 시간에 INSERT SQL을 수행합니다.
- AUTO_INCREMENT를 사용하면 데이터베이스에 INSERT SQL을 실행한 후 ID 값을 알 수 있습니다.
- IDENTITY 전략은 em.persist() 시점에 즉시 INSERT SQL을 실행하고 DB에서 ID를 검색합니다.
- 순서
- 데이터베이스 시퀀스는 고유한 값(예: Oracle 시퀀스)을 순차적으로 생성하는 특수 데이터베이스 개체입니다.
- Oracle, PostgreSQL, DB2 및 H2 데이터베이스와 함께 사용
- 데이터베이스 시퀀스는 고유한 값(예: Oracle 시퀀스)을 순차적으로 생성하는 특수 데이터베이스 개체입니다.
@Entity
@SequenceGenerator(
name = “MEMBER_SEQ_GENERATOR",
sequenceName = “MEMBER_SEQ", //매핑할 데이터베이스 시퀀스 이름
initialValue = 1, allocationSize = 1)
public class Member {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE,
private Long id;
- 테이블
- 키 생성 전용 테이블을 만들어 데이터베이스 시퀀스를 에뮬레이트하는 전략입니다.
- 장점: 모든 데이터베이스에 적용 가능
- 단점: 성능
- 키 생성 전용 테이블을 만들어 데이터베이스 시퀀스를 에뮬레이트하는 전략입니다.
create table MY_SEQUENCES (
sequence_name varchar(255) not null,
next_val bigint,
primary key ( sequence_name )
)
@Entity
@TableGenerator(
name = "MEMBER_SEQ_GENERATOR",
table = "MY_SEQUENCES",
pkColumnValue = “MEMBER_SEQ", allocationSize = 1)
public class Member {
@Id
@GeneratedValue(strategy = GenerationType.TABLE,
generator = "MEMBER_SEQ_GENERATOR")
private Long id;
- 권장 식별자 전략
- 기본 키 제약 : 0이 아닌, 고유한, 변경되지 않아야 함
- 앞으로는 이 조건을 만족하는 자연키를 찾기 어렵다.
예비 키(대체 키를 사용하자) - 예를 들어 주민등록번호도 기본 키로 적합하지 않습니다.
- 권장: 긴 + 대체 키 + 키 생성 전략 사용