【发布时间】:2019-12-05 03:08:50
【问题描述】:
我正在使用 spring boot、webflux 和 r2dbc (postgresql) 构建一个新的 api。我的一张表将有一个 json 或 jsonb 字段,用于存储动态 json 文档。
目前,r2dbc 不支持 postgresql 数据库的 json 数据类型。我想知道是否可以使用它,为存储库编写一些代码。
我创建了一个简单的测试项目来尝试一下,但还没有运气。我能够通过使用org.springframework.data.r2dbc.core.DatabaseClient.execute() 并在查询中用to_json() 包装json 字段来保存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)
【问题讨论】:
-
根据this 博客,新的候选版本支持它。
-
以上链接已失效...
-
我刚试过这个,但我还不能在 spring-data-r2dbc 中使用这种方法。 r2dbc 支持已经存在,但还没有在 spring-data-r2dbc 抽象中。
标签: java postgresql java-11 r2dbc spring-data-r2dbc