Java ORM 표준 JPA 프로그래밍(엔티티 매핑)

엔터티 매핑 소개

  • 개체 및 테이블 매핑: @엔티티, @테이블
  • 필드 및 열 매핑: @나뉘다
  • 기본 키 매핑: ID
  • 연관 매핑: @ManyToone, @JoinColumn

개체 및 테이블 매핑

  • @법인인
    • @Entity로 표시된 클래스는 JPA에서 엔터티라고 합니다.

    • JPA에는 테이블과 매퍼 클래스가 있습니다.

      @법인인 주석 필요
    • 주의
      • 기본 생성자 필요(매개변수가 없는 공개 또는 보호 생성자)
      • 최종 클래스, 열거형, 인터페이스 내부 클래스 X 사용
      • X를 저장할 필드에 finasl 사용
    • 속성: 이름
      • JPA에서 사용할 엔터티 이름을 지정합니다.

      • 기본값: 클래스 이름을 있는 그대로 사용(예: Member)
      • 동일한 클래스 이름이 없으면 가능한 한 기본값을 사용하십시오.
  • @테이블
    • @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”} )})

필드 및 열 매핑


  • 나뉘다

기본 키 매핑

  • 직접 할당: @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 데이터베이스와 함께 사용
@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이 아닌, 고유한, 변경되지 않아야 함
    • 앞으로는 이 조건을 만족하는 자연키를 찾기 어렵다.

      예비 키(대체 키를 사용하자)
    • 예를 들어 주민등록번호도 기본 키로 적합하지 않습니다.

    • 권장: 긴 + 대체 키 + 키 생성 전략 사용