我在使用 QueryDsl/Hibernate (2.8.2) 执行查询时遇到了意外问题。
我的字段是这样生成的,如您所见,它是一个整数。
public final NumberPath nbPotatoes= createNumber("nbPotatoes", Integer.class);
我正在尝试在我的请求中添加“有”子句,如下所示:
res.having( (QGarden.garden.nbPotatoes.sum()).gt(0) );
我正在对 nbPotatoes 字段进行求和,并仅选择总和大于零的行。
执行请求时,我收到以下异常:
Caused by: java.lang.IllegalArgumentException: Parameter value [0] did not match expected type [java.lang.Long]
at org.hibernate.ejb.AbstractQueryImpl.validateParameterBinding(AbstractQueryImpl.java:375)
at org.hibernate.ejb.AbstractQueryImpl.registerParameterBinding(AbstractQueryImpl.java:348)
at org.hibernate.ejb.QueryImpl.setParameter(QueryImpl.java:375)
at org.hibernate.ejb.QueryImpl.setParameter(QueryImpl.java:442)
at org.hibernate.ejb.QueryImpl.setParameter(QueryImpl.java:72)
at com.mysema.query.jpa.impl.JPAUtil.setConstants(JPAUtil.java:44)
at com.mysema.query.jpa.impl.AbstractJPAQuery.createQuery(AbstractJPAQuery.java:135)
at com.mysema.query.jpa.impl.AbstractJPAQuery.createQuery(AbstractJPAQuery.java:103)
at com.mysema.query.jpa.impl.AbstractJPAQuery.list(AbstractJPAQuery.java:271)
所以我尝试将我的参数转换为 Long,但它不起作用,我得到了同样的异常。我发现的唯一方法是将字段的类型更改为 Long 而不是 Integer,但我对这个解决方案不太满意......
知道错误可能在哪里,或者我做错了什么吗?
谢谢 !
编辑 1:不幸的是,它仍然不适用于 QueryDsl 3.2.0。我已经调试了一些代码部分,似乎 Hibernate 做错了什么。我的参数值显然是一个整数(我将值更改为 748 以确保获得正确的参数)。但是在调用方法“getNamedParameterExpectedType”之后,确定的类型被评估为 Long ?!然后,当 Hibernate 检查参数绑定时,它会引发一个匹配的异常,因为它期望一个 Long 类型。
http://www.images-host.fr/view.php?img=14062708bug-hibernate.png
没有人遇到这个问题并解决了吗?