본문 바로가기

전체 글

(76)
[JPA] 프록시와 연관관계 관리 프록시 em.find() vs em.getReference() em.find() : 데이터베이스를 통해 실제 엔티티 객체를 조회한다. em.getReference() : 데이터베이스 조회를 미루는 가짜(프록시) 엔티티 객체를 조회한다. 프록시 특징 실제 클래스를 상속 받아서 만들어지며, 실제 클래스와 겉 모양이 같다. 사용하는 입장에서는 진짜 객체인지 프록시 객체인지 구분하지 않고 사용하면 된다. 프록시 객체는 실제 객체의 참조(target)을 보관한다. 프록시 객체를 호출하면 프록시 객체는 실제 객체의 메소드를 호출한다. 프록시 객체의 초기화 프록시 객체는 처음 사용할 때 한번만 초기화 된다. 프록시 객체를 초기화 할때, 프록시 객체가 실제 엔티티로 바뀌는 것이 아니다. 초기화 되면 프록시 객체를 통해..
[JPA] 상속관계 매핑 전략(@Inheritance, @DiscriminatorColumn) 상속관계 매핑관계형 데이터베이스는 상속관계가 없다.슈퍼타입 서브타입 관계라는 모델링 기법이 객체의 상속과 유사하다.슈퍼타입 서브타입 논리 모델을 실제 물리 모델로 구현하는 방법- 각각 테이블로 변환 → 조인 전략- 통합 테이블로 변환 → 단일 테이블 전략- 서브타입 테이블로 변환 → 구현 클래스마다 테이블 전략 (구조적 결함이 커 실무에서 미사용) 주요 어노테이션@Inheritance(strategy=InheritanceType.XXX)- JOINED : 조인 전략- SINGLE_TABLE : 단일 테이블 전략- TABLE_PER_CLASS : 구현 클래스마다 테이블 전략 (실무 미사용)@DiscriminatorColumn(name="DTYPE"): 하위 클래스를 구분하는 용도의 컬럼이며 기본 값은 "D..