Sau khi nâng cấp lên một phiên bản mới hơn Hibernate (đoán nó đi kèm với công tắc từ JBoss 4.2.2 để JBoss 6), một số truy vấn thất bại với thông điệp:"Tự động" tham gia lấy các thực thể lồng nhau thất bại sau khi cập nhật Hibernate
Caused by: java.lang.IllegalArgumentException: org.hibernate.QueryException: query specified join fetching, but the owner of the fetched association was not present in the select list [FromElement{explicit,not a collection join,fetch join,fetch non-lazy properties,classAlias=null,role=null,tableName= (...)
này luôn luôn là trường hợp khi sử dụng một truy vấn như thế này:
SELECT entityA FROM EntityA entityA
JOIN FETCH entityA.entityB
LEFT JOIN FETCH entityA.entityB.someField
WHERE entityA.entityB.anotherField LIKE :someParameter
các giải pháp cho vấn đề là để cho "entityA.entityB" một bí danh và sau đó sử dụng bí danh này trong mệnh đề WHERE
. Nhưng trong một số truy vấn, LEFT JOIN FETCH
không được đưa ra một cách rõ ràng nhưng vẫn là mệnh đề WHERE
sử dụng thuộc tính của thực thể được tham chiếu. Nó cũng sẽ thất bại ở đó? Điều gì đã thay đổi, để nó đột nhiên thất bại sau khi chuyển sang một phiên bản JBoss mới?
question sau đây có liên quan đến câu hỏi này và bao gồm giải pháp, nhưng không giải thích được sự cố.
Câu hỏi của bạn đã giúp tôi tìm ra giải pháp cho vấn đề của mình, sau khi nâng cấp từ hibernate 3.2.6.ga lên 3.5.6-Final, tôi đã nhận được truy vấn chỉ định tìm nạp, nhưng chủ sở hữu của liên kết đã tìm nạp không có mặt trong danh sách lựa chọn ', sử dụng cách tiếp cận bí danh mà bạn đề xuất nó hoạt động, không thể giúp bạn với' lý do 'mặc dù! –
là HQL này hoặc JPQL tiêu chuẩn? – wrschneider
Điều này được thực hiện thông qua 'EntityManager.createQuery', vì vậy tôi đoán đó là HQL. –