加入fetch:“查询指定的连接提取,但获取的关联的所有者在选择列表中不存在”
我有以下代码:
public class ValueDAO implements BusinessObject { private Long id; private String code; private ClassDAO classDAO ; .... } public List 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
结果我想得到的只是代码。
join fetch val.classDAO.b
意思是“在获取val
,也获取链接到val
的classDAO
”。 但是你的查询不能获取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不能为null并且同时具有给定的ID) - 命名你的实体XxxDAO非常混乱。 DAO和实体根本不是一回事。
鉴于上述情况,可以将查询重写为
select distinct val.code from ValueDAO val where val.classDAO.id = ? order by val.code