본문 바로가기
정리/DB

JPA (2) - 기능 정리

by Hudini30 2022. 4. 11.

개요

JPA 각종 어노테이션, 기능 정리


@Entity

JPA한테 관리하라고 

name : JPA에서 사용할 엔티티 이름을 지정

@Table

엔티티와 매핑할 테이블 지정

name : 매핑할 테이블 이름 - defalult 엔티티 이름을 사용

catalog : 데이터 베이스 catalog 매핑

schema : 데이터베이스 schema 매핑

uniqueConstratins : DDL 생성 시에 유니크 제약 조건 생성

 

@Column

컬럼 매핑

name : 필드와 매핑할 테이블의 컬럼 이름 - default 객체의 필드 이름

insertable, updatable : 등록, 변경 가능 여부 - default true

nuallable/unique/columnDefinition/length/precision,scale : DDL

@Temporal

날짜 타입 매핑, LocalDAte, LocalDAteTime은 생략 가능

value : TemporalType.DATE/TIME/TIMESTAMP

@Enumerated

enum 타입 매핑

value : EnumType.ORDINAL(순서 : 1, 2)/STRING(enum 명)

@Lob

BLOB, CLOB 매핑, 속성 없음

CLOB : String, char[], java.sql.CLOB

BLOB : byte[], java.sql.BLOB

@Transient

특정 필드를 컬럼에 매핑하지 않음(매핑 무시)

 

@Id @GeneratedValue

IDENTITY : 데이터베이스에 위임 - persist 시 즉시 insert 문 실행 하고 db 식별자 조회

SEQUENCE: 시퀸스 오브젝트 사용, @SequenceGenerator 필요

   ㄴ @SequenceGenerator(name = "jpa에서 사용할 시퀸스 명", sequenceName="데이터 베이스 시퀸스 이름", allocationSize=1) 

TABLE : 키 생성용 테이블 사용, @TableGenerator 필요

   ㄴ @TableGenerator(name="jpa에서 사용할 명", table="데이터베이스 sequence table 명", pkColumnValue="키로 사용할 이름",pkColumnName="시퀸스 컬럼 명", valueColumnNa="시퀸스 값 컬럼명", allocationSize = 1)

AUTO : 자동지정

 

allocationSize : 기본값 50, 시퀸스 한 번 호출에 증가하는 수


연관관계 매핑 관련

@ManyToOne

다 대 일 관계 @JoinColumn 꼭 사용해야 함

    ㄴ @JoinColumn(name="매핑할 외래 키 이름", referencedColumnName="외래 키가 참조하는 대상 테이블의 컬럼명", unique, nullable,insertable,updatable,columnDefinition 등 @Column의 속성과 같음)

optional : false로 설정하면 연관된 엔티티가 항상 있어야 함 - default true

fetch : 글로벌 페치 전략을 설정 - default ManyToOne(FetchType.EAGER)/OneToMany(FetchType.LAZY)

cascade: 영속성 전이 기능을 사용

 

@OneToMany

다 대 일 관계 보통

mappedBy : 연관관계의 주인 필드를 선택한다.

fetch : 글로벌 페치 전략을 설정

cascade: 영속성 전이 기능을 사용

@OneToOne

일 대 일 관계 

@ManyToMany

다 대 다 관계 @JoinTable로 연결 테이블 지정

실무에서 잘 사용 안하고 해야 한다면 연결 테이블용 엔티티를 추가

 


상속관계 매핑 관련

@Inheritance

부모클래스에 선언 하고 전략 선택

JOINED

SINGLE_TABLE

TABLE_PER_CLASS

 

@DiscriminatorColumn

부모클래스에 선언 상속받은 클래스들을 구분하려는 필드가 필요한 경우 선언

name : 데이터베이스 구분필드 컬럼 - default DTYPE

@DiscriminatorValue

상속받은 클래스에서 데이터베이스에 저장될 구분필드 값 선언 - default Entity명

@MappedSuperclass

공통 매핑 정보가 필요할 때 사용/직접 생성해서 사용할 일이 없으므로 추상 클래스권장


지연로딩, 즉시로딩 ​권장 사항

 

가급적 지연 로딩만 사용 - @ManyToOne, @OneToOne(default 가 즉시로딩이므로 LAZY 설정 필요

즉시로딩을 사용할 경우 JPQL사용시 N+1 문제를 일으킴. - JPQL로 가져온 후 즉시로딩할 Entity가 있으면 가져온것만큼 다시 쿼리를 날림.(fetch 조인이나 엔티티 그래피 기능 사용시 해결 가능)

 


영속성 전이(CASCADE)

부모를 영속할때 자식도 같이 영속하는 것을 말함. 영속성 전이는 연관관계를 매핑하는 것과아무 관련 없음.

소유주가 하나일때만 사용하는것을 추천

ALL: 모두적용

PERSIST: 영속

REMOVE: 삭제

 

고아 객체 제거 : 부모 엔티티와 연관관계가 끊어질때 자동으로 삭제

참조하는 곳이 하나일 때 사용. 특정 엔티티가 개인 소유할때 사용 @OneToOne, @OneToMany만 가능

orphanRemoval : true/false 

 

'정리 > DB' 카테고리의 다른 글

MyBatis FETCH SIZE에 대해  (0) 2022.08.17
JPA(3) - 값타입  (0) 2022.04.15
JPA (1) - JPA? ORM?  (0) 2022.03.16

댓글