【问题标题】:Spring Data JPA - findAllBy query checks for null?Spring Data JPA - findAllBy 查询检查是否为空?
【发布时间】:2018-06-13 12:43:12
【问题描述】:

The documentation 表明findByLastnameAndFirstname 等于where x.lastname = ?1 and x.firstname = ?2。

我们知道在sql中= NULL总是假的。你必须使用IS NULL。

假设我们有一个条目firstname = "First" 和lastname IS NULL。我称之为findByLastnameAndFirstname(null, "First")。我想它会给我返回空结果,因为= NULL 总是错误的。但是根据我的测试,它返回了条目。

为什么? Spring Data JPA 是否在内部做了一些神奇的事情?

如果我必须为此编写一个自定义查询,它将类似于:lastname IS NULL and lastname IS NULL or lastname = :lastname。使用 Spring Data JPA 编写此类自定义查询的更简单方法?

【问题讨论】:

  • 启用 SQL 日志记录,您将知道正在生成和执行的 SQL 查询。

标签: java mysql hibernate spring-data-jpa jpql


【解决方案1】:

此查询始终返回List。如果没有结果,这个列表是一个 empty 列表(在 Hibernate 中,如果你返回一个 SingleResult 而不是 ResultList 那么 Hibernate 会抛出 NoResultException)。

在你的情况下,我猜使用findByLastnameIsNullAndFirstname(String firstname)。

【讨论】:

    猜你喜欢
    • 2019-07-20
    • 2019-05-30
    • 1970-01-01
    • 2018-07-02
    • 2018-08-06
    • 2015-08-04
    • 2018-09-23
    • 1970-01-01
    相关资源
    最近更新 更多