当有一行时,JPQL计数返回0

时间:2014-04-07 10:04:59

标签: java jpa eclipselink jpql named-query

我使用两个相同的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);

任何建议都表示赞赏。

1 个答案:

答案 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。