join fetch val.classDAO.b
means "when fetching val
, also fetch the classDAO
linked to the val
". But your query doesn't fetch val
. It fetches val.code
only. So the fetch makes no sense. Just remove it, and everything will be fine:
select distinct val.code from ValueDAO val
left join val.classDAO classDAO
where classDAO.id = ?
order by val.code
Some notes, though:
- doing a left join and then adding a retriction like
classDAO.id = ?
means that the join is in fact an inner join (since classDAO can't be null and have the given ID at the same time)
- naming your entities XxxDAO is very confusing. DAOs and entities are not the same thing at all.
Given the above, the query can be rewritten as
select distinct val.code from ValueDAO val
where val.classDAO.id = ?
order by val.code
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…