我正在用spring boot、webflux和r2dbc(postgresql)构建一个新的api。我的一个表将有一个json或jsonb字段,用于存储动态json文档。
就目前而言,r2dbc不支持postgresql数据库的json数据类型。我想知道是否可以使用它,为存储库编写一些代码。
我已经创建了一个简单的测试项目来尝试这个,但还没有成功。我可以使用org保存JSON字段。springframework。数据r2dbc。果心DatabaseClient。execute()并在查询中用将json字段包装为\u json()
,但我以后无法读取它。
测试实体:
@Data
@NoArgsConstructor
@AllArgsConstructor
@Table("Test")
public class Test {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", columnDefinition = "serial")
private Long id;
@Column(name = "data", columnDefinition = "json")
private String data;
}
保存方法工作:
public Mono<Integer> save(Test test) {
return databaseClient.execute("INSERT INTO test (data) VALUES(to_json($1))")
.bind("$1", test.getData())
.fetch()
.rowsUpdated();
}
回读时出现异常:
java.lang.IllegalArgumentException: Cannot decode value of type java.lang.Object
at io.r2dbc.postgresql.codec.DefaultCodecs.decode(DefaultCodecs.java:97)
at io.r2dbc.postgresql.PostgresqlRow.get(PostgresqlRow.java:88)
at io.r2dbc.spi.Row.get(Row.java:63)
at org.springframework.data.r2dbc.convert.ColumnMapRowMapper.getColumnValue(ColumnMapRowMapper.java:100)
at org.springframework.data.r2dbc.convert.ColumnMapRowMapper.apply(ColumnMapRowMapper.java:59)
at org.springframework.data.r2dbc.convert.ColumnMapRowMapper.apply(ColumnMapRowMapper.java:44)
at io.r2dbc.postgresql.PostgresqlResult.lambda$map$0(PostgresqlResult.java:71)
我能够通过查询将json/jsonb转换为TEXT来做到这一点。我不确定这是否是正确的选择,但它有效。
public Mono<Test> findById(Long id) {
return databaseClient.execute("SELECT id, data::TEXT FROM test WHERE id = $1")
.bind("$1", id)
.map(row -> new Test(
row.get("id", Long.class),
row.get("data", String.class)
)
)
.one();
}
使用io。r2dbc。postgresql。编解码器。Json作为您的实体属性类型,请查看我的帖子。
问题内容: 默认情况下,Hibernate 5不支持PostgreSQL 数据类型。 有什么方法可以实现对Hibernate + Spring JPA的支持? 如果有办法,与Hibernate一起使用的利弊是什么? 问题答案: 感谢Vlad Mihalcea我们有这样的机会!) 他创建了hibernate类型的 lib: 这为Hibernate添加了对’json’,’jsonb’和其他类型的支持:
问题内容: 例如,它是否是有效的ajax请求: 有时仅作为示例,否则软件可能会在没有显式字符集的情况下崩溃。 用于application / json媒体类型的rfc 4627 表示,它不接受第6节中的任何参数: 可以解释为charset不应该与application /json一起使用。 和第3节表明,这是没有必要指定字符集: 因为可以从内容推断出UTF-8、16、32编码。为什么说UTF-8是
问题内容: 是否可以使用Node.js在服务器端使用jQuery选择器/ DOM操作? 问题答案: 似乎有一个重大更新,导致原来的答案不再起作用。我找到了这个答案,解释了现在如何使用。我已经在下面复制了相关代码。 注意:原始答案没有提及你还需要使用安装
我需要一些目前在JavaFX中找不到的功能。比如机器人或托盘图标。 我知道这些工具确实适用于JavaFx应用程序。但是可以使用它们吗?有什么需要我考虑的吗?
我正在尝试在谷歌云中构建python ETL管道,谷歌云数据流似乎是一个不错的选择。当我浏览文档和开发人员指南时,我看到apache beam始终连接到数据流,因为它是基于它的。我可能会在apache beam中发现处理数据帧的问题。 我的问题是: 如果我想用带有数据流的本机python构建ETL脚本,这可能吗?或者我的ETL需要使用apache beam 我的管道旨在从BigQuery读取数据,
例如,它是否是有效的ajax请求: 它有时被用作示例,或者软件可以在没有显式字符集的情况下中断。 rfc 4627 for application/json媒体类型表示不接受第6节中的任何参数: 可以这样解释,charset不应该与Application/json一起使用。 第3节建议无需指定字符集: 因为UTF-8,16,32编码可以从内容中感染。为什么说UTF-8是默认的?rfc中没有指定选择