2017-02-28 11 views
0

내 데이터베이스에는 1 대 다수 목록이있는 전자 메일 캠페인이 있고 목록에 많은 가입자가 많습니다.Java Spring Hibernate, Runtime 선택적으로 매핑을 수행 하시겠습니까?

내가 겪고있는 문제는 예를 들어 캠페인을 가져올 때 항상 모든 구독자가 필요하지는 않습니다 (구독자가 많고 다른 캠페인을보고 싶을뿐입니다).

매핑을 만들 때 선택적으로 매핑을 수행 할 수 있습니다 (런타임에 결정). 아니면 문제의 해결책은 무엇입니까? 데이터베이스에서 모든 것을 가져 와서 요청 된 부분을 출력해야합니까? 많은 오버 헤드처럼 보입니다.

답변

1

데이터 모델을 설명하는 방법에 따라 다음과 비슷한 매핑이 있다고 가정합니다 (가져 오기 유형을 기본 LAZY로 지정).

@Entity 
public class Campaign { 
    // ... 
    @OneToMany 
    private List<MailingList> lists; 
} 

@Entity 
public class MailingList { 
    // ... 
    @ManyToMany 
    private List<Subscriber> subscribers; 
} 

@Entity 
public class Subscriber { 
    // ... 
} 

Campaign 엔티티와 관련 MailingList 관계를 가져하려는 경우, 당신은 쉽게 HQL/JPQL에 다음과 같은 것을 수행 할 수 있습니다 하지 가입자 목록 인해를 가져옵니다

FROM Campaign c JOIN FETCH c.lists 

@ManyToMany 연결은 기본적으로 게으르므로 getSubscribers()으로 전화 할 경우에만 가져 오게됩니다.

맵핑에서 항상 LAZY을 가져온 다음 쿼리 시간에 적절한 조인 가져 오기를 지정하여 가장 세부적인 제어가 가능하도록해야합니다.