我正在使用两个相同的 JPQL NamedQueries,只是其中一个是 COUNT。以下是查询:
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 是一个 View 。
第一个查询返回 6 的列表,这是正确的。
第二次查询,计数,返回0。
使用的数据库是Oracle。将 Glassfish 与 Eclipselink 结合使用。 PU 上的共享缓存模式设置为无。
使用 Oracle 中的 native 查询,将返回正确的值。
下面是我用来执行查询并检查结果的代码。这些行之间没有其他代码,它们是像在 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);
如有任何建议,我们将不胜感激。
最佳答案
基于JPQL Language reference ,在 COUNT 函数中,作为聚合函数参数的路径表达式必须以状态字段终止。 COUNT 的路径表达式参数可以以状态字段或关联字段终止,或者 COUNT 的参数可以是标识变量。所以尝试这样的事情
select COUNT(i.<field>) from IssueRingReqsBrit i where i.ringDataRequest = 'I' and i.onRingIssue = 'Y' and i.noCardIssued = 0
COUNT returns Long.
请使用长整型返回结果。
关于java - 当有行时 JPQL 计数返回 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22909298/