有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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语句中使用它时,我也会得到结果。 enter image description here

编辑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=?

为了获得更多信息,我需要设置什么?我正在使用以下罐子 enter image description here

我的java版本是1.7.079


共 (1) 个答案

  1. # 1 楼答案

    我发现解决方案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 and isEmpty()检查()

    旁注:我没有尝试删除条目,然后在q.getFirstResult()调用中查看结果,但这是一种可能性,然后查看返回的内容,然后检查该值是否为空