실제로 결과 목록을 얻지 않고 동적으로 생성 된 HQL 쿼리의 결과 수를 얻고 싶다. 뭔가처럼 내가 가지고있는 쿼리이라고 말 : 나는 최대 절전 모드 설명서를 읽어Hibernate HQL : 실제로 결과를 반환하지 않고 결과의 개수를 얻는다.
select Company company LEFT OUTER JOIN FETCH products product
그 : 당신은 그들을 반환하지 않고 쿼리 결과의 수를 셀 수
:
((Integer) session.createQuery("select count(*) from ....").iterate().next()).intValue()
나는 ....을 내 쿼리로 대체해야한다고 생각했지만 HQL이 지원하지 않기 때문에 작동하지 않습니다. FROM에서 하위 선택합니다.
그래서 동적으로 생성 된 HQL 쿼리의 결과를 어떻게 계산해야합니까? 나는 그것을 실행하고 결과 목록의 .size()를 얻는 것이 불필요한 오버 헤드 일 수 있다고 생각한다.
건배!
** UPDATE : **
내 쿼리 변환이 정규식을 사용 :
Number num = (Number) em.createQuery(dynamicQuery.replaceAll("select \\w+ from ", "select count(*) from ")).getSingleResult();
을 그리고 난이 얻을 :
인용문
EJB 예외 :; java.lang.IllegalArgumentException : org.hibernate.QueryException : 쿼리 지정 조인 페칭 (join fetching),하지만 페치 된 연관의 소유자가 선택 목록에 존재하지 않음 [FromElement {명시 적, 콜렉션 조인, 조인 페치, 비 페치 -lazy 속성, classAlias = product, role = org.myCompany.applicant.entity.Applicant.products, tableName = PRS_DEV.PRODUCT, tableAlias = products1_, origin = PRS_DEV.APPLICANT applicant0_, colums = {applicant0_.APPLICANT_ID, className = org. myCompany.product.entity.Product}}] [select count () from org.myCompany.applicant.entity.Applicant 신청인 LEFT OUTER JOIN FETCH 신청인. 제품 제품]; java.lang.IllegalArgumentException : org.hibernate.QueryException : 쿼리 지정 조인 페칭 (join fetching),하지만 페치 된 연관의 소유자가 선택 목록에 존재하지 않음 [FromElement {명시 적, 콜렉션 조인, 조인 페치, 비 페치 -lazy 속성, classAlias = product, role = org.myCompany.applicant.entity.Applicant.products, tableName = PRS_DEV.PRODUCT, tableAlias = products1_, origin = PRS_DEV.APPLICANT applicant0_, colums = {applicant0_.APPLICANT_ID, className = org. org.myCompany.applicant.entity.Applicant 신청자 LEFT OUTER에서 myCompany.product.entity.Product}}] [선택 카운트 () 이것은 트릭을해야 applicant.products 제품]
예, 나는 그것을 시도 할 수 있습니다. 예외가 발생했습니다 : QueryException : 쿼리가 조인 페칭을 지정했지만 페치 된 연관의 소유자가 선택 목록에 없습니다. 전체 스택 추적을 보려면 내 updte를 참조하십시오. –
@Markos : 답변을 업데이트했습니다. – Henning
고마워, 효과가 있었어! –