Tôi muốn nhận được số lượng kết quả của truy vấn HQL được tạo động, mà không thực sự nhận được danh sách kết quả. Nói rằng các truy vấn tôi có là cái gì đó như:Hibernate HQL: Nhận số kết quả mà không thực sự trả lại chúng
select Company company LEFT OUTER JOIN FETCH products product
Tôi đọc trong tài liệu Hibernate rằng:
Bạn có thể đếm số lượng các kết quả truy vấn mà không trả lại cho họ:
((Integer) session.createQuery("select count(*) from ....").iterate().next()).intValue()
Tôi nghi ngờ rằng tôi nên thay thế .... bằng truy vấn của mình, nhưng điều đó không hoạt động, vì HQL không cho phép ort lựa chọn phụ trong FROM.
Vì vậy, làm cách nào tôi nên đếm kết quả của truy vấn HQL được tạo động? Tôi nghĩ rằng bằng cách thực hiện nó và nhận được .size() của danh sách kết quả có thể là chi phí không cần thiết.
Chúc mừng!
** UPDATE: **
tôi đã sử dụng regex này để chuyển đổi truy vấn của tôi:
Number num = (Number) em.createQuery(dynamicQuery.replaceAll("select \\w+ from ", "select count(*) from ")).getSingleResult();
Và tôi có được điều này:
Blockquote
EJB Ngoại lệ:; ngoại lệ lồng nhau là: java.lang.IllegalArgumentException: org.hibernate.QueryException: truy vấn được chỉ định tham gia tìm nạp, nhưng chủ sở hữu của liên kết được tìm nạp không có trong danh sách chọn [FromElement {rõ ràng, không phải là một bộ sưu tập nối, tìm nạp, tìm nạp không Thuộc tính -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}}] [lựa chọn số () từ org.myCompany.applicant.entity.Applicant người nộp đơn LEFT OUTER JOIN FETCH applicant.products sản phẩm]; ngoại lệ lồng nhau là: java.lang.IllegalArgumentException: org.hibernate.QueryException: truy vấn được chỉ định tham gia tìm nạp, nhưng chủ sở hữu của liên kết được tìm nạp không có trong danh sách chọn [FromElement {rõ ràng, không phải là một bộ sưu tập nối, tìm nạp, tìm nạp không Thuộc tính -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 () từ org.myCompany.applicant.entity.Applicant đơn LEFT OUTER JOIN FETCH applicant.products sản phẩm]
Có, tôi đã cố gắng đó. Tôi nhận được một ngoại lệ: QueryException: truy vấn tìm nạp được chỉ định truy vấn, nhưng chủ sở hữu của liên kết được tìm nạp không có trong danh sách chọn. Xem bảng kê của tôi để biết dấu vết ngăn xếp đầy đủ –
@Markos: Tôi đã cập nhật câu trả lời của mình. – Henning
Cảm ơn người đàn ông, nó đã hoạt động! –