일부 조인에 이상한 문제가 발생했습니다. 간단히 말해서 왼쪽에 합류하면 내가 올바른 수의 행을 얻습니다. 내가 왼쪽 조인 가져 오기를 수행하면 예상보다 많은 행을 가져옵니다.더 많은 행을 반환하는 조인 가져 오기
내 엔티티 클래스는 내가 수업 시간에 네 의 보수이 나의 관계에서
public class One {
...
private Set<Two> twos;
}
public class Two {
...
private Set<Three> threes;
}
public class Three {
...
}
(간결을위한 의사 코드를 사용하여) 각 클래스 이
에서 하나 아홉 열로 나는 네 개의 두 개의 클래스와 각각의 두 개의 세 개의 클래스로 하나의 클래스 하나를 반환 할 것으로 예상했다. 내가 왜 두 번째는이 증식하는 원인 가져 않습니다
List<One> res = em.createQuery("select o from One o left join o.twos t left join t.threes where o.id = 322", One.class).getResultList();
List<Two> twos = resultList.get(0).getTwos(); //results in four twos - CORRECT
List<One> res = em.createQuery("select o from One o left join fetch o.twos t left join t.threes where o.id = 322", One.class).getResultList();
List<Two> twos = resultList.get(0).getTwos(); //results in four twos - CORRECT
List<One> res = em.createQuery("select o from One o left join fetch o.twos t left join fetch.threes where o.id = 322", One.class).getResultList();
List<Two> twos = resultList.get(0).getTwos(); //results in thirty size twos - *INCORRECT* (is four * nine)
를 사용하는 경우
내가이 얻을. 내 DB에 성능 문제가 있으므로 페치 조인을 시도하고 개선하려고합니다. 비록 내가 기대했던 것보다 더 많은 결과를 가지고있는 것처럼 보이지만 페치를함으로써.
내 ORD로 Oracle DBE 및 JPA2/hibernate를 사용하고 있습니다.
감사
내 hierachy에서 가짜 목록을 발견 @JB Nizet에서 주석으로 당
목록이 아니라 집합입니까? –
클래스'One','Two'와'Three'는'equals()'와'hashCode()'를 정확하게 구현합니까? –
아하! JBNizet에게 감사드립니다. 구조가 훨씬 복잡해지기 때문에 이것을 너무 단순화했습니다. 내가 그것을 통과했을 때 나는 세트 였어야만했던 가짜리스트를 발견했다! 감사합니다 – RNJ