Хотя довольно поздно для ответа (для вставки части), я надеюсь, что это может быть полезным кому-то еще :
Возьмите пары ключ/значение в HashMap:
Map<String, String> hstoreMap = new HashMap<>();
hstoreMap.put("key1", "value1");
hstoreMap.put("key2", "value2");
PGobject jsonbObj = new PGobject();
jsonbObj.setType("json");
jsonbObj.setValue("{\"key\" : \"value\"}");
использование одним из следующим образом, чтобы вставить их в PostgreSQL:
1)
jdbcTemplate.update(conn -> {
PreparedStatement ps = conn.prepareStatement("INSERT INTO table (hstore_col, jsonb_col)");
ps.setObject(1, hstoreMap);
ps.setObject(2, jsonbObj);
});
2)
jdbcTemplate.update("INSERT INTO table (hstore_col, jsonb_col) VALUES(?,?)",
new Object[]{ hstoreMap, jsonbObj }, new int[]{Types.OTHER, Types.OTHER});
3) Set hstoreMap/jsonbObj в POJO (hstoreCol типа Map и jsonbObjCol имеет тип PGObject)
BeanPropertySqlParameterSource sqlParameterSource = new BeanPropertySqlParameterSource(POJO);
sqlParameterSource.registerSqlType("hstore_col", Types.OTHER);
sqlParameterSource.registerSqlType("jsonb_col", Types.OTHER);
namedJdbcTemplate.update("INSERT INTO table (hstore_col, jsonb_col) VALUES (:hstoreCol, :jsonbObjCol)", sqlParameterSource);
И получить значение:
(Map<String, String>) rs.getObject("hstore_col"));
((PGobject) rs.getObject("jsonb_col")).getValue();
удивительно, что до сих пор не работает для меня. исправлено обновление до последнего драйвера версии postgres. – linqu