【问题标题】:Spring Data JPA - problem with null parameter for NUMBER column typeSpring Data JPA - NUMBER 列类型的空参数问题
【发布时间】:2020-11-06 08:37:39
【问题描述】:

我想进行动态查询,如果发送特定参数,本机查询应根据它过滤结果。如果为 null,则不应反映结果。

我正在使用带有原生查询机制 + Oracle DB 的 Spring Data JPA

对于字符串参数,这种方法可以正常工作

:email is null or s.email = :email

但是对于具有值的整数参数,查询可以工作,但如果参数为空,则查询失败并出现错误

原因:java.sql.SQLSyntaxErrorException:ORA-00932:不一致的数据类型:预期的 NUMBER 得到了 BINARY

我对 Integer 使用完全相同的方法而不是 String

我想知道问题是在我这边还是某种错误?

【问题讨论】:

标签: java spring orm spring-data-jpa


【解决方案1】:

在 Oracle DB 中,它不是这样工作的。一种解决方法是使用类似 JPQL 的

SELECT s FROM Entity s WHERE :id is null OR s.id = COALESCE(:id, -1)

或者原生查询使用oracle的TO_NUMBER函数

SELECT s FROM Entity s WHERE :id is null OR s.id = TO_NUMBER(:id)

【讨论】:

  • 非常感谢@Eklavya。您的解决方案按预期工作。你能解释一下为什么当参数有值时,例如 Integer age = 1;查询有效,但当值为空时,例如 Integer age = null;失败了?
  • @Tsvetoslav 在这里您可以找到dba.stackexchange.com/questions/4291/…的详细信息
猜你喜欢
  • 2019-07-02
  • 1970-01-01
  • 2018-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-17
  • 2021-09-11
相关资源
最近更新 更多