Java 存在行时返回0的JPQL计数
我使用两个相同的JPQL namedQuery,除了一个是计数。以下是查询:Java 存在行时返回0的JPQL计数,java,jpa,eclipselink,jpql,named-query,Java,Jpa,Eclipselink,Jpql,Named Query,我使用两个相同的JPQL namedQuery,除了一个是计数。以下是查询: select i from IssueRingReqsBrit i where i.ringDataRequest = 'I' and i.onRingIssue = 'Y' and i.noCardIssued = 0 select COUNT(i) from IssueRingReqsBrit i where i.ringDataRequest = 'I' and i.onRingIssue = 'Y' and
select i from IssueRingReqsBrit i where i.ringDataRequest = 'I' and i.onRingIssue = 'Y' and i.noCardIssued = 0
select COUNT(i) from IssueRingReqsBrit i where i.ringDataRequest = 'I' and i.onRingIssue = 'Y' and i.noCardIssued = 0
IssueRingReqsBrit是一个视图
第一个查询返回一个6的列表,这是正确的
第二个查询count返回0
使用的数据库是Oracle。使用带日食的玻璃鱼。PU上的共享缓存模式设置为“无”
使用Oracle中的本机查询,将返回正确的值
下面是我用来执行查询和检查结果的代码。这些行之间没有其他代码,它们是复制和粘贴的,就像在Java中一样
query = em.createNamedQuery("IssueRingReqsBrit.onRingIssue_toSend_initial");
System.out.println("Size: " + query.getResultList().size() );
//ringingRequestRingIssueYesToSendInitial
query = em.createNamedQuery("IssueRingReqsBrit.onRingIssue_toSend_initial_count");
ringingRequestRingIssueYesToSendInitial = ((Long)query.getSingleResult()).intValue();
System.out.println("ringingRequestRingIssueYesToSendInitial = " + ringingRequestRingIssueYesToSendInitial);
非常感谢您的建议。基于,在COUNT函数中,作为聚合函数参数的路径表达式必须在状态字段中终止。COUNT的路径表达式参数可以在状态字段或关联字段中终止,或者COUNT的参数可以是标识变量。所以试试这样吧
select COUNT(i.<field>) from IssueRingReqsBrit i where i.ringDataRequest = 'I' and i.onRingIssue = 'Y' and i.noCardIssued = 0
计数返回长
使用返回的结果为长。基于,在COUNT函数中,作为聚合函数参数的路径表达式必须在状态字段中终止。COUNT的路径表达式参数可以在状态字段或关联字段中终止,或者COUNT的参数可以是标识变量。所以试试这样吧
select COUNT(i.<field>) from IssueRingReqsBrit i where i.ringDataRequest = 'I' and i.onRingIssue = 'Y' and i.noCardIssued = 0
计数返回长
利用您在很长一段时间内返回的结果。@AndreiI是的,我将用我用来执行查询和检查的代码更新问题。@AndreiI是的,我将用我用来执行查询和检查的代码更新问题。太棒了!解决了这个问题!非常感谢。如果这是一个需求,我不确定为什么它不会导致编译错误,但我会知道未来。再次感谢,太棒了!解决了这个问题!非常感谢。如果这是一个需求,我不确定为什么它不会导致编译错误,但我会知道未来。再次感谢。