객체와 테이블 매핑: @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 |