Spring data repository 将 null 作为 bytea 发送到 PostgreSQL 数据库
2022-09-04 04:29:03
从MySQL切换到PostgreSQL后,我发现我的SQL查询(@Query spring数据存储库接口中)不再工作。该问题是由空值作为 bytea 发送引起的,我收到以下异常:
Caused by: org.postgresql.util.PSQLException: ERROR: operator does not exist: bigint = bytea
Hint: No operator matches the given name and argument type(s). You might need to add explicit type casts.
包含@Query的存储库:
public interface WineRepository extends PagingAndSortingRepository<Wine, Long> {
@Query(value = "SELECT * FROM WINE w WHERE (?1 IS NULL OR w.id = ?1)", nativeQuery = true)
Wine simpleTest(Long id);
}
简单测试:
LOGGER.warn("test1: {}", wineRepository.simpleTest(1L)); //ok
LOGGER.warn("test2: {}", wineRepository.simpleTest(null)); //PSQLException
在实际情况下,我有多个参数可以为空,我宁愿不在java代码中检查它们,而是将它们发送到sql查询。我已经检查了stackoverflow上的问题,但没有找到一个很好的答案,特别是对于春季数据存储库@query注释。
使用PostgreSQL处理空值的正确方法是什么?或者你有什么提示如何解决我的方法?谢谢!
更新:问题似乎与 有关,当值为 false 时,null 值按预期工作。因此,问题是,即使启用了nativeQuery,是否有可能使其正常运行。nativeQuery = true