嗨,谁能告诉我为什么这个 java 查询失败?
Query q = entityManager.createNativeQuery("SELECT m.* FROM MdmAudit m WHERE m.correlationID = :correlationId AND m.verb = :verb", MdmAuditDAO.class);
//Query q = entityManager.createNamedQuery("MdmAuditDAO.GetData");
q.setParameter("correlationId", resp.getHeader().getCorrelationID());
q.setParameter("verb", resp.getHeader().getVerb());
long result = (long) q.getFirstResult();
命名查询:
@NamedQuery( name="MdmAuditDAO.GetData", query="SELECT m FROM MdmAuditDAO m WHERE m.correlationId = :correlationId AND m.verb = :verb")
public class MdmAuditDAO implements Serializable {
我的 MdmAuditDAO 类中有 getter 和 setter,并且我检查了变量的命名,它们与 NamedQuery 中的相同,因此问题不在那里。
我的问题是我的数据库中有 3 个条目,我至少应该得到一个答案,但结果却是 0。
MdmAuditDAO 在我的 persistence.xml 和我的 ehcache.xml 中定义。那为什么我返回的结果是0呢?我还尝试获取返回的对象或对象列表,并且结果相同,没有返回任何内容,但是当我在 mssql 数据库中运行查询时,我得到的结果如下图所示。它与 m.*
无关,当我在 SELECT 语句中使用它时,我也会得到结果。
编辑1:这是我从 hibernate 日志中获得的内容,但我不知道如何阅读?
Hibernate:
select
mdmauditda0_.id as id1_7_,
mdmauditda0_.correlationID as correlat2_7_,
mdmauditda0_.messageID as messageI3_7_,
mdmauditda0_.meter_no as meter_no4_7_,
mdmauditda0_.noun as noun5_7_,
mdmauditda0_.payload as payload6_7_,
mdmauditda0_.source as source7_7_,
mdmauditda0_.subtype as subtype8_7_,
mdmauditda0_.time as time9_7_,
mdmauditda0_.verb as verb10_7_
from
MdmAudit mdmauditda0_
where
mdmauditda0_.correlationID=?
我的java版本是1.7.0_79。
最佳答案
我找到了解决方案http://www.objectdb.com/api/java/jpa/Query/getFirstResult返回第一个元素的位置,但我对短语有点困惑
Returns 0 if setFirstResult was not applied to the query object.
我无法理解它。
我现在的解决方案是只返回一个对象列表
Query q = entityManager.createNativeQuery("SELECT m.* FROM MdmAudit m WHERE m.correlationId = :correlationId AND verb = :verb", MdmAuditDAO.class);
//Query q = entityManager.createNamedQuery("MdmAuditDAO.GetData");
q.setParameter("correlationId", resp.getHeader().getCorrelationID());
q.setParameter("verb", resp.getHeader().getVerb());
List<MdmAuditDAO> mdmAuditList = q.getResultList();
然后它工作正常并且我得到了结果。因此,我不再在代码中执行 result == 0
检查,而是只执行 NULL 和 isEmpty()
检查 ()。
旁注:我没有尝试删除条目,然后在 q.getFirstResult()
调用中查看结果是什么,但这将是一种可能性,看看我会返回什么,然后检查该值,正确的是 null 吗?
关于java - 为什么这个 Java 查询失败?有结果时返回0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41180719/