Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java org.postgresql.util.PSQLException:错误:无法确定参数$1的数据类型_Java_Spring_Postgresql_Spring Data Jpa_Native - Fatal编程技术网

Java org.postgresql.util.PSQLException:错误:无法确定参数$1的数据类型

Java org.postgresql.util.PSQLException:错误:无法确定参数$1的数据类型,java,spring,postgresql,spring-data-jpa,native,Java,Spring,Postgresql,Spring Data Jpa,Native,我正在使用JPA和spring Boot以及Postgres。我正在尝试使用扩展org.springframework.data.repository.crudepository的存储库运行本机查询。查询如下所示: public interface MyRepository extends CrudRepository<MyObject, String> { ... @Query(value = "SELECT * FROM objects WHERE met

我正在使用JPA和spring Boot以及Postgres。我正在尝试使用扩展org.springframework.data.repository.crudepository的存储库运行本机查询。查询如下所示:

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);
    ...
}
知道我做错了什么吗


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

@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.sqlgrammareexception:无法提取结果集

我仍然不清楚…

我认为这是因为jsonb_build_对象接受可变参数。您需要一个typecast来告诉Postgresql键和值的数据类型,这些键和值作为变量text或int或其他任何形式提供,否则它不知道在json中使用什么数据类型

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

我对Java和Spring一无所知,但我认为它试图使用一个预先准备好的语句,并隐藏美元变量。尝试使用::text强制转换变量。

我尝试过的其他变体:
jsonb_build_object('key', $1::text)