2012-01-16 71 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