JPA(16)
-
cascade, orphanRemoval
영속성 전이 cascade 특정 엔티티를 영속 상태로 만들거나 삭제 상태로 만들때, 그와 관련된 엔티티도 함께 영속 상태나 삭제 상태로 만들고 싶을때 사용. 연관관계의 주인이 누구인지와는 상관없이 사용. 참조하는 곳이 한곳일때, 특정 엔티티가 개인 소유할 때 사용. @OneToMany(mappedBy="parent", cascade=CascadeType.PERSIST) CascadeType의 종류 ALL: 모두 적용 PERSIST: 영속 REMOVE: 삭제 MERGE: 병합 REFRESH: REFRESH DETACH: DETACH 고아 객체 삭제 orphanRemoval @OneToMany(mappedBy="parent", orphanRemoval=true) 부모 컬렉션에서 자식 엔티티 삭제하면 DELE..
2021.01.20 -
지연로딩과 즉시로딩
지연로딩(fetch = FetchType.LAZY) A엔티티가 B엔티티를 참조하고 있다고 하자 지연로딩은 A엔티티를 조회할때 A엔티티 정보만 SELECT하고 B엔티티 정보는 SELECT하지 않다가 B엔티티 정보를 참조할때 B엔티티 정보를 SELECT하는 것. A엔티티를 조회할 시점에 B타입의 프록시를 생성하여 대체. 프록시는 B타입을 상속받아 구현. B엔티티 정보를 조회해야할때 프록시는 영속성 컨텍스트에 초기화 요청을 하면 영속성 컨텍스트가 B엔티티 정보를 DB에 요청하여 받아서 B엔티티를 생성해주고 프록시는 생성된 B엔티티 객체를 참조하여 데이터를 읽어온다. 즉시로딩(fetch = FetchType.EAGER) 즉시로딩은 A엔티티를 조회할때 B엔티티 정보도 같이 조인하여 전부 가져오는 것. 즉시로딩의 ..
2021.01.20 -
상속관계 매핑
상속관계 매핑 관계형 데이터베이스는 상속관계를 기술적으로 지원하지 않는다. 하지만 슈퍼타입과 서브타입이라는 모델링 기법으로 상속관계를 설계할 수 있다. 조인 전략, 단일 테이블 전략, 구현 클래스마다 테이블 전략 이렇게 3가지 전략이 있다. @Inheritance(strategy=InheritanceType.XXX) 부모 클래스에 설정한다. 부모 클래스는 상황에 맞게 Abstract 추상 클래스로 만들어 사용. InheritanceType.JOINED 조인 전략 부모 클래스에 맞는 슈퍼타입 테이블이 생성되고 자식 클래스에 맞는 서브타입 테이블이 생성된다. 장점 테이블 정규화 외래키 참조 무결성 제약조건 활용가능 저장공간 효율화 단점 조회시 조인을 많이 사용 데이터 저장시 INSERT SQL 2번 호출 I..
2021.01.19 -
연관관계 매핑
다중성 일대일: @OneToOne 일대다: @OneToMany 다대일: @ManyToOne 다대다: @ManyToMany -> 실무에서 사용안함. 관계형 데이터베이스는 다대다 관계를 표현할 수 없으며 일대다, 다대일 관계로 풀어내야하고, 엔티티도 이에 맞게 설계되야한다. 방향 단방향: Member 엔티티에서 Team 엔티티로만 참조할 수 있는 구조 외래키(TEAM_ID)가 있는 엔티티(Member)에 @ManyToOne 어노테이션을 적용하고 @JoinColumn( name = "TEAM_ID")를 적용하면 단방향 연관관계 매핑이 끝난다. 연관관계 매핑이 되면, 데이터 등록, 삭제시 JPA가 연관관계에 따라 데이터를 바인딩해준다. @Entity public class Member { @Id @Generat..
2021.01.19 -
기본키 매핑 어노테이션 정리 @Id, @GeneratedValue, @SequenceGenerator, @TableGenerator
기본키 매핑은 직접할당과 자동할당 방법으로 나뉜다. @Id 직접할당. 엔티티의 기본키 필드에 값을 직접 넣어 등록한다. @GeneratedValue 자동할당 속성값 설명 대표DBMS strategy = GenerationType.IDENTITY 기본키 생성을 데이터베이스에 위임. MYSQL strategy = GenerationType.SEQUENCE 시퀀스 사용, @SequenceGenerator 필요(시퀀스 생성) ORACLE strategy = GenerationType.TABLE 키 생성용 테이블 사용, @TableGenerator 필요 모든 DBMS strategy = GenerationType.AUTO 데이터베이스 방언에 따라 자동 지정(기본값) 1. IDENTITY 전략 IDENTITY 전략..
2021.01.18 -
컬럼 매핑 어노테이션 정리 @Column, @Temporal, @Enumerated, @Lob, @Transient
@Column 속성 설명 기본값 name 필드와 매핑할 테이블의 컬럼명 객체의 필드 이름 insertable updatable 등록, 변경 가능 여부 true nullable(DDL) not null 제약 조건 true unique(DDL) unique 제약 조건 @Table의 uniqueConstraints와 같지만 제약 조건 이름을 설정할 수 없어 실무에선 @Table의 uniqueConstraints 사용을 권장한다. columnDifinition(DDL) 데이터베이스의 컬럼 정보를 직접 설정할 수 있다. 예) varchar(100) default 'EMPTY' length(DDL) 문자의 길이 제약조건, String 타입에만 사용한다. 255 presicion scale(DDL) BigDecima..
2021.01.18