gpt4 book ai didi

java - 查询结果为 "ERROR: operator does not exist: character varying ~~ bytea"

转载 作者:行者123 更新时间:2023-12-04 12:57:46 26 4
gpt4 key购买 nike

我有一个查询,我需要首先检查输入参数是否为空或比较列值以传递输入参数。这意味着列值可以为 null 或传递指定条件(?3 为 null 或 cd.name 像 %?3%)。

public interface PageableCategoryRepository extends PagingAndSortingRepository<Category, Long> {
@Query(
value = "select distinct c from Category c left join fetch c.descriptions cd join fetch cd.language cdl join fetch c.merchantStore cm"
+ " where cm.id=?1 and cdl.id=?2 and (?3 is null or cd.name like %?3%) order by c.lineage, c.sortOrder asc",
countQuery = "select count(c) from Category c join c.descriptions cd join c.merchantStore cm "
+ "where cm.id=?1 and cd.language.id=?2 and (?3 is null or cd.name like %?3%)")
Page<Category> listByStore(Integer storeId, Integer languageId, String name, Pageable pageable);
}
上述查询因 name 属性中传递的空值而失败。
错误:

ERROR: operator does not exist: character varying ~~ byteaHint: No operator matches the given name and argument types. You might need to add explicit type casts.Position: 3259


我试图在谷歌以及 Stack Overflow 上搜索。有许多类似的问题被问及回答。但是这些解决方案都不适合我。
如果有人能提供一些见解或方向,我将不胜感激。
注意:Spring boot 版本 - 2.2.7.RELEASE,使用的 Postgresql 库版本 - 42.2.16,使用的 Postgresql 版本 - 12.4

最佳答案

如果是 null,Postgres 无法确定参数的类型.
这里已经讨论过这个问题:Spring Data Rest: "Date is null" query throws an postgres exception
建议的解决方案是显式转换参数(就像错误消息中也建议的那样),或者将参数包装在 coalesce 中。陈述。
所以这应该是诀窍:
替换所有这些:

?3 is null 
通过这个声明:
coalesce(?3, null) is null
当涉及参数变化的查询时,查看 Criteria API 而不是使用 @Query 也是一个好主意。因为它允许非常动态地创建查询:
https://www.baeldung.com/hibernate-criteria-queries

关于java - 查询结果为 "ERROR: operator does not exist: character varying ~~ bytea",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63971110/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com