JPA - Proxy
·
Spring/JPA
프록시 객체란? 해당 엔티티와 연관된 다른 엔티티를 한 번에 조회하지 않고 실제로 필요할 때 프록시 객체를 초기화시켜 사용한다. 프록시 객체를 사용하면 자원 낭비를 막을 수 있다. 지연 로딩을 이해하기 위해 필요한 기초 개념 em.getReference()라는 메서드로 프록시 객체인지 확인 가능 em.find()는 실제 엔티티 객체를 조회하는 메서드 프록시의 특징 실제 클래스를 상속받아서 만들어진다. 하이버네이트가 내부적으로 상속받음 실제 클래스와 동일한 타입처럼 보인다. 사용하는 입장에서는 진짜 객체인지 프록시 객체인지 구분하지 않고 사용한다. 프록시 객체는 실제 객체의 참조대상을 보관한다. 프록시 객체를 호출하면 프록시 객체는 실제 객체의 메소드를 호출한다. 프록시 객체의 초기화 Member객체를 e..
JPA - MappedSuperClass
·
Spring/JPA
@MappedSuperclass란? 객체의 입장에서 공통 매핑 정보가 필요할 때 사용 예를 들어 공통으로 작성일, 작성자, 수정일, 수정자를 공통으로 집어넣고 싶을때 사용한다. 공통 매핑 정보가 필요할 떄 부모 클래스에 선언하고 속성만 상속받아서 사용하고 싶을 때 사용한다. 객체에 적용하기 import lombok.Data; import javax.persistence.MappedSuperclass; import java.time.LocalDate; import java.time.LocalDateTime; @Data @MappedSuperclass public abstract class BaseEntity { /** * 작성자 및 작성일 */ private String createdBy; private ..
JPA - 상속관계매핑
·
Spring/JPA
상속관계 매핑 객체는 상속관계가 존재하지만, 관계형 DB에는 상속 관계가 없다. 상속관계 매핑이라는 것은 객체의 상속 구조와 DB의 슈퍼타입 서브타입 관계를 매핑하는 것 슈퍼타입과 서브타입 논리 모델 → 물리모델로 구현하는 방법 3가지 방법이 존재한다. JPA가 이 3가지 방법과 매핑하려면 @Inheritence(strategy=InheritanceType.XXX)의 strategy를 설정해주면 된다. XXX = ‘JOINED’,’SINGLE_TABLE’,’TABLE_PER_CLASS’로 구성되어 있다. @DiscriminatorColumn(name=”DTYPE”) 부모 클래스에서 선언, 하위 클래스를 구분하는 용도의 컬럼을 생성 관례는 default=DTYPE @DiscriminatorValue(”XX..