gpt4 book ai didi

java - 组织.postgresql.util.PSQLException : ERROR: could not determine data type of parameter $1

转载 作者:行者123 更新时间:2023-11-29 13:18:08 28 4
gpt4 key购买 nike

我将 JPA 与 spring Boot 和 Postgres 一起使用。我正在尝试使用扩展 org.springframework.data.repository.CrudRepository 的存储库运行 native 查询。查询如下所示:

public interface MyRepository extends CrudRepository<MyObject, String> {    
...
@Query(value = "SELECT * FROM objects WHERE metadata @>
jsonb_build_object('tenant', :tenant , 'objectType', :objectType )", nativeQuery = true)
List<MyObject> findAllBy(@Param("tenant") String tenant, @Param("objectType") String objectType);
...
}

当我运行查询时出现错误:

org.postgresql.util.PSQLException: ERROR: could not determine data type of parameter $1

我检查了很多类似的案例,但无法让这个查询在这个或类似的变体中工作。

建表语句:

create table objects
(
key varchar(256),
tenant varchar(256),
metadata jsonb,
data jsonb
);

知道我做错了什么吗?

我尝试过的其他变体(这次使用可分页对象):

@Query(value = "SELECT * FROM objects WHERE metadata @> jsonb_build_object(\\'tenant\\', ?1 , \\'objectType\\', ?2) ORDER BY ?#{#pageable}",
countQuery = "SELECT count(*) FROM objects WHERE metadata->>\\'tenant\\' = ?1 and metadata->>\\'objectType\\' = ?2",
nativeQuery = true)
Page<OSObject> findAllBy(String tenant, String objectType, Pageable pageable);

这导致:org.hibernate.exception.SQLGrammarException: 无法提取结果集

我还在黑暗中……

最佳答案

我认为这是因为 jsonb_build_object 接受可变参数。你需要一个类型转换来告诉 Postgresql 作为变量(文本或整数或其他任何东西)提供的键和值的数据类型,否则它不知道在 json 中使用什么数据类型。

jsonb_build_object('key', $1::text)

我对 Java 和 Spring 一无所知,但我想它会尝试在幕后使用带有美元变量的准备好的语句。尝试使用 ::text 转换变量。

关于java - 组织.postgresql.util.PSQLException : ERROR: could not determine data type of parameter $1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46158488/

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