728x90 DataBase/JPA43 [JPA] Lazy 와 Eager Lazy 란? 지연로딩이라고 한다. 언제쓸까? Member 객체안에 Team 객체가 있다고 생각해봅시다. Member 안에 team을 쓰는 경우가 드물다면? 보통은 Member 를 조회하면 안에 있는 Team도 같이 조회가 된다. 그렇게 되면 불필요한 연산이 추가가 되는 것이다. Lazy를 사용하면 된다. Lazy 예제 FetchType.LAZY 를 써주면 된다. - @ManyToOne(fetch = FetchType.LAZY) Member class @Entity public class Member { @Id //PK 설정 @GeneratedValue @Column(name = "MEMBER_ID") private Long id; @Column(name = "name", nullable = false,.. 2021. 8. 19. [JPA] 프록시 프록시 JPA에서 객체를 조회 할때 find 함수 왜에도 getReference 가 있다. getReference 를 할 경우 프록시를 가져온다. 프록시는 일단 가짜 엔티티 라고 생각하자. 멤버가 팀을 가지고 있는 구조에서 멤버만 find 했을때 항상 Team 도 같이 불러 온다. 꼭 그래야 할까? 아니다 Proxy를 사용했을때 멤버에서 팀을 호출 하는 순간 쿼리가 조회된다. 프록시의 구조 실제 클래스를 상속 받아 만들어 진다. 실제 클래스와 겉 모양이 같다. 하이버네이트가 내부의 라이브러리를 사용해서 가짜 엔티티 객체를 준다. 아래 그림을 보면 실제 Entity 를 상속 받아서 Proxy가 만들어 진다. 프록시는 껍대기 라고 생각하면 된다. - 실제로는 ID 값만 가지고 있다. 프록시는 어떤 역할을 하.. 2021. 8. 11. [JPA] @MappedSuperclass @MappedSuperclass 해당 어노테이션은 공통속성을 만들어서 사용할때 쓴다. 테이블과 관계 없고 단순히 공통으로 사용하는 정보를 모으는 역할만한다. 언제쓸까? 예를 들어 대부분 테이블에 다음과 같은 속성이 들어가야된다 해보자 createBy(생성한사람) createTime(생성시간) modifiedBy(수정자) lastModifiedTime(마지막 수정시간) 그렇다면 JPA 에서 모든 클래스를 전부다 찾아서 넣어줘야 될까? 절대 아니다 MappedSuperclass 로 공통 클래스를 하나 만들고 상속만 해주면된다. 구현 공통 클래스 구현 @MappedSuperclass 어노테이션을 붙여서 공통클래스를 설정해주었다. // 해당 어노테이션을 쓰면 // 상속 받은 모든 클래스에 해당 속성만 들어가게 .. 2021. 8. 9. [JPA] 고급 매핑1: 상속관계 맵핑 상속관계 맵핑 상속관계 맵핑에 대해 알아본다. JPA 로 구현을 해본다. 상속관계 맵핑이란? 관계형 DB 는 상속관계 없다. 관계형 DB는 슈퍼, 서브타입 관계라는 모델링 기법이 객체 상속과 유사 객체의 상속과 구조와 DB의 슈퍼, 서브 타임 관계를 매핑하는것 상속관계 맵핑전략의 종류 조인 전략 단일테이블 전략 클래스마다 테이블 전략 어노테이션 @Inheritance(strategy=InheritanceType.XXX) XXX에 들어가는 속성들 JOINED: 조인 전략 SINGLE_TABLE: 단일 테이블 전략 TABLE_PER_CLASS: 구련 클래스 마다 테이블 전략 @DiscriminatorColumn(name="DTYPE") Child 의 Entity 네임이 들어간다. 아래 예제로 설명 @Disc.. 2021. 8. 8. 이전 1 ··· 3 4 5 6 7 8 9 ··· 11 다음 728x90 반응형