java - 当有行时 JPQL 计数返回 0

标签 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 是一个 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/

相关文章:

hibernate - 如何在我的 Maven 项目中包含 JPA 2.1 功能?

java - 如何使用 JPA 和 EclipseLink 对 2 个(或更多)数据库进行命名 native 查询

java - 在 Java 中测试构建器模式

java - Spring调度程序CPU使用率

oracle - Hibernate 5 序列生成问题

java - Spring 将entitymanager getResultList结果转换为JSON

java - EclipseLink 和 Spring OXM 继承问题

java - 我得到一个 PersistenceException,我不明白为什么

java - 在 Java REST 中将字符串转换为 JSON

java - 如何通过冲突的 maven-surefire-plugin 和 org.ow2.asm 在 Maven 中使用 JUnit 5 和 Java 10