setfirstresult 및 setMaxResults를 사용할 때 resultTransformer를 사용하지 않고 뚜렷한 결과 세트를 얻는 것을 알고 있습니까?

StackOverflow https://stackoverflow.com/questions/545940

문제

setfirstresult 및 setmaxresult를 사용하면 쿼리가 결합되면 결과가 고유 한 대신 중복 결과가 있습니다.

그런 다음 기준 API에 모든 유형의 고유 한 도우미를 사용합니다. 그러나 전체 결과 세트를 필터링하지 않으면 PAGED 결과를 필터링합니다.

이 문제를 어떻게 극복 할 수 있습니까?

감사

도움이 되었습니까?

해결책

나는 찾았다 극복해야 할 해킹 이 문제.

내가 생각해 낼 수 있었던 유일한 "해결 방법"은 동일한 기준 객체에서 기준에서 두 개의 쿼리를 발행하는 것입니다. 첫 번째는 ID를 얻습니다. 두 번째는 ID에 반대됩니다.

// Pagination을 포함하여 원하는대로 Crtieria를 설정합니다. mycriteria.setfirstresult ((Page-1)*itemsperpage); mycriteria.setmaxresults (itemsperpage);

// 기본 키 인 경우 목록을 가져옵니다. mycriteria.setProjection (projections.distInct (projects.property ( "myallias.id")); list ids = gacc.list ();

// 이제 ID를 제한에 추가합니다. mycriteria.add (extrictions.in ( "myalias.id, ids));

// 마지막 critiera run gacc.setprojection (null)에서 정리합니다. gacc.setfirstresult (0); gacc.setmaxresults (integer.max_value);

// 결과 목록 개체 = gacc.list ()

약간의 해킹에 동의하지만,이 한계를 감안할 때 내가 찾을 수있는 유일한 허용되는 해결책.

다른 팁

나는 비슷한 솔루션을 만들었지 만 DB로 한 번만 여행 만했습니다.

DetachedCriteria subQuery = ... //-> 원하는 모든 기준을 추가하고 "setFirstresult"및 "setMaxResults"

DetachedCriteria rootquery = DetachedCriteria.for (); // 여기서 t는 엔티티입니다

subquery.setprojection ( projections.distinct (projections.proejectList (). add (projections.alias (projects.property ( "id"), "id")))) );

// 참고 : "ID"rootquery.add (subqueries.propertyin ( "id", subquery))을 포함하는 기본 클래스에서 상속됩니다.

// ... 그런 다음 RootQuery를 사용하여 T 목록을 가져 오면 반복 된 항목이 검색되지 않습니다.

누군가 가이 구현이 도움이되기를 바랍니다. :)

로마 인

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top