Hibernate中Having子句命名参数绑定失效问题求助
问题分析与解决
你的代码里存在变量名不匹配的低级错误:
- 你创建的查询对象是
idsq,但调用setParameter时用的是未定义的query变量,导致Hibernate根本没有处理你写的:mx参数,自然提示找不到该参数。
修正后的代码:
Long mx = 4; SelectionQuery<Long> idsq = session.createSelectionQuery ( "select model.marca.firma.tara.id id from Automobil group by id having count(*)=:mx", Long.class); idsq.setParameter("mx", mx); // 改为使用正确的查询对象调用setParameter List<Long> ids = idsq.getResultList();
如果修正变量名后仍有问题,可排查以下两点:
- 检查Hibernate版本:部分旧版本对HAVING子句的参数绑定支持存在瑕疵,建议升级至稳定版本。
- 规范JPQL语法:
group by id中的id是查询结果的别名,虽语法允许,但更严谨的写法是group by model.marca.firma.tara.id,避免解析歧义。
内容的提问来源于stack exchange,提问作者armagedescu
相关产品推荐
相关产品推荐

