Hibernate 기준은 FetchType.EAGER를 사용하여 중복 주문을 반환합니다
질문:
주문의 orderTransactions 목록 가져오기 유형을 FetchType.EAGER로 가져오는 경우 Criteria를 사용하여 검색된 결과 목록에 주문이 여러 번 나타나는 이유는 무엇입니까?
답변:
이 동작은 다음과 같습니다. 예상되는. FetchType.EAGER를 사용하면 orderTransactions를 적극적으로 가져오기 위해 조인이 수행됩니다. 결과적으로 표준 SQL 조인과 동일한 수의 결과가 발생하며 각 주문은 해당하는 각 orderTransaction의 결과 집합에 표시됩니다.
이를 이해하려면 생성된 SQL 문을 고려하세요.
SELECT o.*, l.* from ORDER o LEFT OUTER JOIN LINE_ITEMS l ON o.ID = l.ORDER_ID
이 명령문에서는 모든 주문에 대해 모든 관련 품목이 검색되어 결과 집합에 동일한 주문이 여러 번 표시됩니다.
뚜렷한 결과를 얻기 위한 솔루션:
FetchType.EAGER를 사용하여 중복된 결과를 필터링하려면 LinkedHashSet과 같이 삽입 순서를 유지하는 컬렉션 유형을 사용할 수 있습니다.
Collection<Order> result = new LinkedHashSet( session.createCriteria(Order.class) .add(Restrictions.in("orderStatus", orderFilter.getStatusesToShow())) .list() );
위 내용은 ## Hibernate 기준이 FetchType.EAGER를 사용하여 중복 주문을 반환하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!