我使用两个相同的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是一个视图。
第一个查询返回一个6的列表,这是正确的。
第二个查询,即计数,返回0.
正在使用的数据库是Oracle。使用Glassfish和Eclipselink。 PU上的共享缓存模式设置为none。
在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);
任何建议都表示赞赏。
答案 0 :(得分:3)
基于JPQL Language reference,在COUNT函数中,作为聚合函数参数的路径表达式必须以状态字段终止。 COUNT的路径表达式参数可以在state-field或association-field中终止,或者COUNT的参数可以是标识变量。所以试试这样的事情
select COUNT(i.<field>) from IssueRingReqsBrit i where i.ringDataRequest = 'I' and i.onRingIssue = 'Y' and i.noCardIssued = 0
COUNT返回Long。
利用你在长时间内返回resulat。