【问题标题】:org.postgresql.util.PSQLException: ERROR: could not determine data type of parameter $1org.postgresql.util.PSQLException:错误:无法确定参数 $1 的数据类型
【发布时间】:2018-02-19 20:38:17
【问题描述】:

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

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: 错误: 无法确定数据 参数类型 $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:无法提取结果集

我还在黑暗中......

【问题讨论】:

  • 我尝试过的其他变体:

标签: java spring postgresql spring-data-jpa native


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2017-10-29
    • 1970-01-01
    • 1970-01-01
    • 2021-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-22
    相关资源
    最近更新 更多