Spring Data JPA - NUMBER 列类型的 null 参数问题

Tsv*_*kov 8 java orm spring spring-data-jpa

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

我使用带有本机查询机制的 Spring Data JPA + Oracle DB

对于字符串参数,这种方法效果很好

:email is null or s.email = :email
Run Code Online (Sandbox Code Playgroud)

但对于整数参数,当它们具有值时,查询可以工作,但如果参数为空,查询将失败并出现错误

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

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

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

Ekl*_*vya 11

在 Oracle DB 中,情况并非如此。解决方法是使用 JPQL,例如

SELECT s FROM Entity s WHERE :id is null OR s.id = COALESCE(:id, -1)
Run Code Online (Sandbox Code Playgroud)

或者对于本机查询使用TO_NUMBERoracle的功能

SELECT s FROM Entity s WHERE :id is null OR s.id = TO_NUMBER(:id)
Run Code Online (Sandbox Code Playgroud)