javajooq&PostgreSQL:将从复杂jsonb提取的嵌套json对象映射到自定义类型
我在PostgreSQL数据库中使用JSON对象。堆栈是Java 11、Spring Boot 2+和Spring Boot jooq启动器
我经常使用利用Jackson的Binding
和Converter
将ajsonb
列反序列化为复杂类型。到目前为止还不错
现在我有一个更复杂的用例:我有一个查询,它将json对象的一部分(使用select子句中的jsonb_column::jsonb ->> nestedObject
操作符)提取到我记录的一个字段中
我想将该记录映射到一个pojo中,这样记录的所有字段都映射到pojo的字段(使用@Column
注释),并且特定的json嵌套对象应该映射到特定的Java对象
实现这一目标的正确方法是什么
有没有一种方法可以使用绑定和forcedType
(就像我映射完整的jsonb
列一样)来实现这一点
我是否应该求助于RecordMapper
来做那件事
# 1 楼答案
您将需要两个部分来实现这一点
一,。嵌套对象的数据类型绑定
这可以使用如下代码实现:
在哪里
此绑定将负责将嵌套对象结构的任何外观映射到该类型的Java表示。您必须直接绑定到JDBC才能读取JSONB内容
从jooq3.12(see #7242)开始,将有本机的
JSONB
支持,使用它您可以更轻松地实现绑定,即二,。一个普通的SQL模板,用于表示嵌套对象的非测试表达式
您无法轻松地向代码生成器提供嵌套对象提取表达式以获取数据,因此必须使用上述数据类型创建plain SQL template
现在,您可以在所有查询中使用这个
field
表达式