Nih*_*ish 4 postgresql hibernate jpa spring-boot
在Spring Boot应用程序中,我有一个在postgresql服务器上执行的SQL查询,如下所示:
@Query(value = "select count(*) from servers where brand= coalesce(?1, brand) " +
        "and flavour= coalesce(?2, flavour) ; ",
        nativeQuery = true)
Integer icecreamStockCount(String country, String category);
然而,
执行该方法时出现以下错误:
ERROR: COALESCE types bytea and character varying in PostgreSQL
如何将String value = null传递给查询?
**注意:**我发现我的问题从JPA查询变化为处理NULL参数值
您不需要合并,试试这个
@Query("select count(*) from servers where (brand = ?1 or ?1 is null)" +
        " and (flavour = ?2 or ?2 is null)")
Integer icecreamStockCount(String country, String category);
当我中遇到这个错误,我最终使用的组合OR和CAST解决的问题。
SELECT COUNT(*)
FROM servers
WHERE (?1 IS NULL OR brand = CAST(?1 AS CHARACTER VARYING))
AND (?2 IS NULL OR flavour = CAST(?2 AS CHARACTER VARYING))
即使、和都是可为空的字段?1,这也有效。?2brandflavor
请注意,传递null为?1意味着“所有服务器不分品牌”而不是“所有服务器都没有品牌”。对于后者,您可以IS DISTINCT FROM按如下方式使用。
SELECT COUNT(*)
FROM servers
WHERE (CAST(?1 AS CHARACTER VARYING) IS NOT DISTINCT FROM brand)
AND (CAST(?2 AS CHARACTER VARYING) IS NOT DISTINCT FROM flavour)
最后,某些参数类型(例如Boolean不能在 SQL 中BYTEA转换BOOLEAN为from to ,对于这些情况,您需要双重转换:
SELECT COUNT(*)
FROM servers
WHERE (?1 IS NULL OR is_black = CAST(CAST(?1 AS CHARACTER VARYING) AS BOOLEAN))
在我看来,这是 Hibernate 中的一个问题,可以通过将 Javanull参数作为普通 SQL传递NULL而不是解释null为 type 值来解决BYTEA。
| 归档时间: | 
 | 
| 查看次数: | 4731 次 | 
| 最近记录: |