sql server为什么此Java查询失败?有结果时返回0
嗨,有人能告诉我为什么这个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:
@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中的相同,因此问题不在这里
我的问题是,我的数据库中有三个条目,我应该至少得到一个答案,但我的结果是0
MdmAuditDAO是在我的持久性中定义的。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.079
# 1 楼答案
我发现解决方案http://www.objectdb.com/api/java/jpa/Query/getFirstResult返回第一个元素的位置,但我对这个短语有点困惑
我没办法理解它
我现在的解决方案是只返回一个对象列表
然后它工作得很好,我得到了结果。所以,我在代码的后面部分不做
result == 0
检查,而是做一个NULL and isEmpty()
检查()旁注:我没有尝试删除条目,然后在
q.getFirstResult()
调用中查看结果,但这是一种可能性,然后查看返回的内容,然后检查该值是否为空