2012-01-16 75 views
1

,我發現了以下情況例外,當我嘗試運行我的HQL查詢:ExecutionException當通過HQL拋出查詢

java.util.concurrent.ExecutionException: javax.ejb.EJBException: 
java.lang.IllegalArgumentException: org.hibernate.QueryException: query specified join 
fetching, but the owner of the fetched association was not present in the select list 

這裏是我運行查詢:

SELECT new com.airit.propworks.dto.CompanyContactReportDTO(comp, compStatus.statusDesc) 
FROM CoCompany as comp 
LEFT JOIN FETCH comp.coCompanyCategoriesCompanyNumbers as compCat 
LEFT JOIN FETCH comp.coContactCompanyNumbers as compCont 
LEFT JOIN FETCH comp.coOperatingNamesCompanyNumbers 
LEFT JOIN compCat.categoryFunctionCoCategoryList as compFcn 
LEFT JOIN FETCH compCont.coContactDocumentssCompositeFK1 as contDoc 
LEFT JOIN FETCH compCont.coContactJobssCompositeFK1 as contJob 
LEFT JOIN FETCH compCont.coPhoneNumberssCompositeFK1 
LEFT JOIN FETCH contDoc.documentTypeCoDocumentTypes as docTypes 
LEFT JOIN FETCH contJob.contactFunctionCoContactFunctions as contFcn 
LEFT JOIN comp.companyStatusCoCompanyStatuses as compStatus --this was added by me 
WHERE comp.companyNumber = ? ORDER BY comp.companyName 

線第二個到最後一個是由我添加的,並且構造函數是由我添加的。直到我加入那些線條纔開始獲得例外。

正如你可以看到倒數第二行指comp.companyStatusCoCompanyStatuses是一個連接返回單個CoCompanyStatuses對象,然後我試圖讓從statusDesc字符串傳遞給構造函數。

我不確定是什麼原因導致了我得到的異常。你們看到什麼了嗎?

+0

在DB中保存DTO? – yair 2012-01-16 22:30:22

+0

@yair不,這是一個查詢從數據庫中恢復數據。 DTO是數據的容器。 – Graham 2012-01-16 22:34:41

+0

哦,我現在看到它:)。 – yair 2012-01-17 08:37:03

回答

1

有一個opened bug使用select new結合join fetch

由於問題與增加的select new有關,因此您可以將檢索與構建CompanyContactReportDTO分開。

+0

謝謝你的幫助。問題解決了。 – Graham 2012-01-17 17:49:27

+0

不客氣! – yair 2012-01-17 18:17:30