java - 为什么这个 Java 查询失败?有结果时返回0

标签 java sql-server hibernate

嗨,谁能告诉我为什么这个 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 语句中使用它时,我也会得到结果。 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=?

我需要设置什么才能获取更多信息吗?我正在使用以下 jar enter image description here

我的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/

相关文章:

java - Hibernate Search - 即使 Elasticsearch 集群关闭也启动应用程序

hibernate - 我的 Grails 3.3.8 应用程序中 SpringSecurityService 中的 MissingPropertyException

java - 与多个客户端的 ServerSocket 连接

java - 如何使用 jdbc 连接到 pgAdmin

java - 在 Spring Boot 应用程序中使用 MuleClient

SQL 服务器 : How to select rows that were inserted on the same day?

sql-server - Azure 数据工厂在从 SQL 复制到 ADLS 时抛出 'Length Required"错误

c# - 使用 C# DateTime 将 SQL 日期时间设置为最小值

java - 如何避免在多线程时访​​问相同的静态计数器

java - Hibernate 选择父项,其子项列表与子项参数匹配