我有以下代码:
public class ValueDAO implements BusinessObject<Long> {
private Long id;
private String code;
private ClassDAO classDAO ;
....
}
public List<String> getCodesByCodeClass(Long classId) {
String select = "select distinct val.code from ValueDAO val left " +
"join fetch val.classDAO ";
String where = "where val.classDAO.id = ? order by val.code";
return getHibernateTemplate().find(select + where, classId);
}
它引发了一个例外:
org.hibernate.QueryException: query specified join fetching, but the owner of the fetched association was not present in the select list
在结果中我只想获得代码。
答案 0 :(得分:21)
join fetch val.classDAO.b
表示&#34;在抓取val
时,还会抓取与classDAO
&#34;相关联的val
。但是您的查询并未获取val
。它仅提取val.code
。所以抓取没有任何意义。只需删除它,一切都会好的:
select distinct val.code from ValueDAO val
left join val.classDAO classDAO
where classDAO.id = ?
order by val.code
但有些注意事项:
classDAO.id = ?
这样的限制意味着连接实际上是一个内连接(因为classDAO不能为空并且同时具有给定的ID)鉴于上述情况,可以将查询重写为
select distinct val.code from ValueDAO val
where val.classDAO.id = ?
order by val.code