2016-09-09 3 views
0

그래서 나는이 두 테이블 사이의 ManyToOne 관계가 한 쿼리에서 부모 엔티티와 어린이리스트에 가입 :
Hibernate는

@Entity 
public class Parent{ 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private int id; 

    @OneToMany(cascade = CascadeType.ALL, mappedBy="parent", orphanRemoval=true) 
    @OrderBy(clause="id DESC") 
    private List<Children> childs= new ArrayList<Children>(); 
} 

@Entity 
public class Children{ 
     @Id 
     @GeneratedValue(strategy = GenerationType.IDENTITY) 
     private int id; 

     @ManyToOne 
     private Parent parent; 

} 

그래서 제가하고 싶은 것은이 한 쿼리에서 어린이를의 포함 List<Parent>를 얻는 것입니다, 나는 게으른 로딩을 사용하고 싶지 않다는 것을 의미하므로, 한 쿼리에서 부모에게 아이들을 참여시키고 부모 목록을 얻고 싶습니다.
최대 절전 모드의 기준 또는 HQL을 사용하여 어떻게 접근 할 수 있습니까? 내가 원하는
나는이 쿼리를 사용했지만 그것은 나를 포기하지 않을 것 :

List<Parent> list = session.createQuery("SELECT p FROM Parent p JOIN p.childs c ORDER BY p.id DESC").list(); 

이 나에게 List<Parent>을 제공하지만 중복 부모를 얻을 때를 루프 그것을 통해이 부모가 하나 이상의 자녀가있는 경우!

답변

0

(일반적으로 사용자 지정 쿼리를 작성하는 데 사용되는) 최대 절전 기준을 명시 적으로 사용할 필요가 없으며 GenericRepositoryHibernate에서 표준 OOTB 메서드를 사용할 수 있습니다.

주의해야 할 점은 작성한 상위 bean에 child (유형이 string 또는 int가 아닌) 유형의 하위 등록 정보가 있어야한다는 것입니다. 어느 것을 이미했는지. 이러한 종류의 매핑은 어려운 바인딩입니다.

본질적으로 이것이 전부입니다. 문제가있는 경우 - 로그 스 니펫 &을 제공하여 문제를 설명하십시오.

+0

감사하지만 내가 도달 할 수있는 목표를 가지고 문제가없는, 그냥 알고 요청 . – SlimenTN

+0

자, 그럼 알겠습니다. 그것은 간단합니다, 행운을 빈다! –

0

를 FETCH 가입하십시오 : 그것을 할 수있는 간단하고 최적화 된 방법이 있는지 답변에 대한

List<Parent> list = session.createQuery("SELECT p FROM Parent p JOIN FETCH p.childs c ORDER BY p.id DESC").list(); 
+0

Sry 똑같은 결과, 복제 부모 ... – SlimenTN

+0

SELECT ** DISTINCT ** p 부모로부터 p 조인 패치 p.childc ORDER BY p.id DESC 그리고 작동합니까? – adyjr

+0

DISTINCT는 작업을 수행했으나 하위 목록을 호출 할 때마다 게으른로드를 수행하면서 최대 절전 모드로 전환하여 최대 절전 모드로 하위 쿼리를 실행하여 하위 항목을 가져옵니다. – SlimenTN