Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 约克公司;PostgreSQL:将从复杂jsonb提取的嵌套json对象映射到自定义类型_Java_Json_Postgresql_Jooq - Fatal编程技术网

Java 约克公司;PostgreSQL:将从复杂jsonb提取的嵌套json对象映射到自定义类型

Java 约克公司;PostgreSQL:将从复杂jsonb提取的嵌套json对象映射到自定义类型,java,json,postgresql,jooq,Java,Json,Postgresql,Jooq,我在PostgreSQL数据库中使用JSON对象。堆栈是Java 11、Spring Boot 2+和Spring Boot jooq启动器 我经常将ajsonb列反序列化为复杂类型,使用利用Jackson的Binding和Converter。到目前为止还不错 现在我有了一个更复杂的用例:我有一个查询,它将json对象的一部分(使用select子句中的jsonb_column::jsonb->>nestedObject操作符)提取到我记录的一个字段中 我想将该记录映射到一个pojo中,这样记录的

我在PostgreSQL数据库中使用JSON对象。堆栈是Java 11、Spring Boot 2+和Spring Boot jooq启动器

我经常将a
jsonb
列反序列化为复杂类型,使用利用Jackson的
Binding
Converter
。到目前为止还不错

现在我有了一个更复杂的用例:我有一个查询,它将json对象的一部分(使用select子句中的
jsonb_column::jsonb->>nestedObject
操作符)提取到我记录的一个字段中

我想将该记录映射到一个pojo中,这样记录的所有字段都映射到pojo的字段(使用
@Column
注释),并且特定的json嵌套对象应该映射到特定的Java对象

实现这一目标的正确方法是什么

有没有一种方法可以使用绑定和
forcedType
(就像我映射完整的
jsonb
列一样)来实现这一点


我是否需要借助
记录映射器来实现这一点?

实现这一点需要两个部分

1.嵌套对象的数据类型绑定 这可以使用如下代码实现:

DataType<NestedType> myType = SQLDataType.OTHER.asConvertedDataType(new YourBinding());
2.一个普通SQL模板,用于表示嵌套对象的非测试表达式 您无法轻松地向代码生成器提供嵌套对象提取表达式以获取数据,因此必须使用上述数据类型创建一个

Field<NestedType> field = DSL.field("jsonb_column::jsonb ->> nestedObject", myType);
Field-Field=DSL.Field(“jsonb_列::jsonb->>nestedObject”,myType);
现在,您可以在所有查询中使用此
字段
表达式

DataType<NestedType> myType = SQLDataType.JSONB.asConvertedDataType(new YourBinding());
class YourBinding implements Binding<JSONB, NestedType> { ... }
Field<NestedType> field = DSL.field("jsonb_column::jsonb ->> nestedObject", myType);