【问题标题】:Spring Data JPA native query does not return correct resultSpring Data JPA 本机查询不返回正确结果
【发布时间】:2019-03-01 10:28:13
【问题描述】:

我有以下代码试图获取整数:

woID = (Integer) this.em.createNativeQuery("SELECT fk_workorderid FROM manufacturing.workorders_todos WHERE fk_todoid = ?1")
            .setParameter(1, todoID)
            .getResultList()
            .stream()
            .findFirst()
            .orElse(null);
LOGGER.debug("After native query Todo ID: "+todoID+" / WO ID: "+woID);

在日志中,这是我看到的:

2018-09-25 11:45:25,691 https-jsse-nio-8493-exec-8 调试休眠.SQL - SELECT fk_workorderid FROM Manufacturing.workorders_todos WHERE fk_todoid = ?

2018-09-25 11:45:25,691 https-jsse-nio-8493-exec-8 DEBUG loader.Loader - bindNamedParameters() 102754 -> 1 [1]

2018-09-25 11:45:25,691 https-jsse-nio-8493-exec-8 TRACE sql.BasicBinder - 绑定参数 [1] 作为 [INTEGER] - [102754]

2018-09-25 11:45:25,691 https-jsse-nio-8493-exec-8 调试 制造.ToDoFunctions - 本地查询后 Todo ID: 102754 / WO 编号:无

但是,如果我将 SQL 放到 MySQL Workbench 中,那么我会得到 woID 的预期结果。原生查询总是返回 null 有什么问题?

【问题讨论】:

    标签: hibernate spring-data-jpa


    【解决方案1】:

    如果您的查询中没有明确定义,GUI(如 mysql 工作台)也适用和“排序依据”。这就是为什么明确定义 always 和“order by”子句是一种很好的做法。

    在本教程中,您可以找到如何在 mysql 中处理空值和“排序依据”的技术:

    https://www.designcise.com/web/tutorial/how-to-order-null-values-first-or-last-in-mysql

    【讨论】:

    • 虽然记住这一点可能很好,但我认为这不是问题所在。问题是我应该得到一个带有整数值的记录,而不是它没有得到任何记录,因此我得到一个空值。不过,我确实尝试了您的建议以确保。
    • 如果您删除 .findFirst() ,您也没有得到任何记录吗?您是否尝试将 todoID 值放入 ?1,并删除 .setParameter(1, todoID),只是为了测试结果是否始终为空?
    • 是的,我已经尝试了很多事情,包括将查询放入存储库(因此没有 findFirst 或类似的东西)。我还尝试硬编码 todoID 的值,但仍然得到空结果。更令人费解的是,这段代码在一个可重用的函数中,并且在其他任何地方都可以正常工作。在这种情况下,几乎就像查询实际上并没有运行一样,但我不知道这会如何发生或为什么会发生。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多