Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
org.hibernate.Criteria无法与Projections.rowCount()一起正常工作_Hibernate_Count_Criteria_Hibernate Criteria - Fatal编程技术网

org.hibernate.Criteria无法与Projections.rowCount()一起正常工作

org.hibernate.Criteria无法与Projections.rowCount()一起正常工作,hibernate,count,criteria,hibernate-criteria,Hibernate,Count,Criteria,Hibernate Criteria,在我的应用程序的某一点上,我进行计数以显示datatable的总记录—在本例中是按服务列出的合同计数—如下所示: public int countByServices(ContractFilter filter) { Criteria criteria = ((Session) entityManager.getDelegate()).createCriteria(ContractServiceDB.class); criteria.createAlias("co

在我的应用程序的某一点上,我进行计数以显示datatable的总记录—在本例中是按服务列出的合同计数—如下所示:

public int countByServices(ContractFilter filter) {
        Criteria criteria = ((Session) entityManager.getDelegate()).createCriteria(ContractServiceDB.class);
        criteria.createAlias("contract", "contract", Criteria.INNER_JOIN);
        criteria.add(Restrictions.eq("contract.status", filter.getStatus().getId()));
        criteria.add(Restrictions.isNull("contract.processed"));
        criteria.add(Restrictions.eq("contract.customerId", filter.getCustomerId()));
        criteria.add(Restrictions.in("service", filter.getServices()));
        criteria.setProjection(Projections.rowCount());
        return ((Long) criteria.uniqueResult()).intValue();
}
Contract和Service具有多对多关系,ContractServiceDB是链接实体,因为它有自己的属性。第一次查询运行正常,但稍后再次调用该方法时,它会引发异常:

org.hibernate.PropertyAccessException: could not get a field value by reflection getter of br.com.foo.bar.db.entity.ContractServiceDBPK.cdSncode
Caused by: java.lang.IllegalArgumentException: Can not set java.lang.String field br.com.foo.bar.db.entity.ContractServiceDBPK.cdSncode to java.lang.Long
cdSncode是实体的主键之一,因为它是嵌入的。一、 当然,要声明其getter:

public String getCdSncode() {
        return this.cdSncode;
}
字符串到长转换行是countByServices方法的返回-奇怪的是,结果不再是长值,即使投影设置为rowCount。我也试过了

criteria.setProjection(Projections.countDistinct("contract"));
这给了我同样的例外


我做错了什么?如果需要,我可以提供更多的代码。谢谢你的帮助。

我也遇到过类似的问题

看起来你用错误的方式做了一个标准:

criteria.add(Restrictions.eq("contract.status", filter.getStatus().getId()));

您必须改为执行“contract.status.id”。

如果同一个操作只运行一次,但后来失败,我们可以从检查这两次之间的变化开始。这种情况下发生了什么变化?我今天也遇到了同样的问题。如果我在没有限制的条件上调用rowCount(),它可以正常工作。当我用限制调用它时,会出现异常。。。如果你找到了解决方案,请分享!