将地图转换为HStore

时间:2018-09-03 13:33:43

标签: java postgresql spring-boot spring-data-jpa hstore

我需要调用具有hstore参数的Postgresql函数。

我这样称呼它:

@Repository
public interface DocumentRepo extends JpaRepository<DokumentInstancja, Integer> {

    @Query(value = "SELECT * FROM gabinet.test(?)", nativeQuery = true)
    public Integer test(HStore mapa);
}

HStore是我的包装类:

@Convert(converter = MyHStoreConverter.class)
public class HStore extends HashMap<String, String> {

    public HStore() {
        super();
    }

    public HStore(Map map) {
        super(map);
    }
}

我按照其他stackoverflow问题中的建议使用了Converter,但在那里它被用于不分类的字段。但是在我的情况下,map不是任何其他对象的字段。

我得到的错误:

2018-09-03 15:24:17.864 TRACE 13288 --- [nio-8080-exec-3] o.h.type.descriptor.sql.BasicBinder      : binding parameter [1] as [VARBINARY] - ["key1"=>"val1","key2"=>"val2"]
2018-09-03 15:24:17.865  WARN 13288 --- [nio-8080-exec-3] o.h.engine.jdbc.spi.SqlExceptionHelper   : SQL Error: 0, SQLState: 42883
2018-09-03 15:24:17.865 ERROR 13288 --- [nio-8080-exec-3] o.h.engine.jdbc.spi.SqlExceptionHelper   : ERROR: function gabinet.test(bytea) does not exist

有人可以建议解决我的问题吗? 预先感谢。

1 个答案:

答案 0 :(得分:0)

您可以使用

将 hstore 参数转换为字符串
HStoreConverter.toString(Map<?, ?> map)

使用字符串更改过程参数

procedure_name(input_string_in character varying)

在程序内部,您可以将其从字符串转换回 hstore

CAST (input_string_in as hstore)