본문 바로가기

웹 프로그래밍/JPA

엔티티 매핑

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

@Entity가 붙은 클래스는 JPA가 관리하는 엔티티

    -기본 생성자 필수 (@NoArgConstructor 사용하면 편리)

    -final , enum, interface, inner 클래스 사용 X

 

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

-DDL을 애플리케이션 실행 시점에 자동 생성

-데이터베이스 방언을 활용해서 데이터베이스에 맞는 적절한 DDL 생성

-개발용임 (운영에서는 직접 만들어야함)

 

 

필드와 컬럼 매핑

-@Column: 컬럼 매핑

    -insertable:등록 가능 여부    

    -updatable:수정 가능 여부

    -nullable: not null 조건

    -unique: 유니크 제약조건

    -columnDefinition: 특정방언에 종속적인 정보

 

-@Temporal: 날짜 타입 매핑(안씀)

    -LocalDate 쓰면 됨

 

-@Enumerated: enum 타입 매핑

    -EnumType.String 필수로 수정해야함

 

-@Lob: BLOB, CLOB 매핑

    -문자면 CLOB, 나머지는 BLOB

 

-@Transient: 매핑 안하고 싶을때

 

 

 

기본 키 매핑

-직접 할당: @Id만 사용

-자동 생성: @GeneratedValue

    -IDENTITY 전략(기본 키 생성을 데이터 베이스에 위임) e.g. MySQL의 AUTO_INCREMENT

        -persist() 시점에 INSERT SQL이 실행 돼야함

        -원래는 트랜잭션 커밋 시점인데 id값을 알아야 하기 때문에 예외적으로 실행

        -다른 전략은 원래대로 트랜잭션 커밋 시점에 쿼리가 날라감

    -SEQUENCE 전략(기본 키 생성) e.g. Oracle의 SEQUENCE

        -persist() 시점에 INSERT 쿼리는 아니지만 시퀀스(PK)를 가져오는 쿼리가 날라감

        -allocationSize를 사용해서 한번에 시퀀스를 얼만큼 가져올지 설정(쿼리 적게 날라가니 성능향상)

    -Table 전략(키 생성 전용 테이블을 하나 만들어서 시퀀스처럼 쓰는 전략): 모든 데이터베이스에 적용가능 but 성능 하락

 

권장하는 식별자 전략

-기본 키 제약 조건: null 아님, 유일, 변하면 안됨

-자연키는 찾기 어려움, 대리키(대체키)를 사용 e.g. 주민등록번호(비니지스)로 기본 키로 하면 안됨

-권장: Long형 + 대체키 + 키 생성전략 사용

 

'웹 프로그래밍 > JPA' 카테고리의 다른 글

프록시  (1) 2023.03.04
고급 매핑  (0) 2023.03.04
연관관계 매핑 기초  (0) 2023.03.03
영속성 관리  (0) 2023.02.28
JPA(Java Persisitence API)  (0) 2023.02.28