>  기사  >  Java  >  ## Hibernate 기준이 FetchType.EAGER를 사용하여 중복 주문을 반환하는 이유는 무엇입니까?

## Hibernate 기준이 FetchType.EAGER를 사용하여 중복 주문을 반환하는 이유는 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-10-26 04:18:02428검색

## Why Does Hibernate Criteria Return Duplicate Orders with FetchType.EAGER?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.