java - Jackson - 双向 - 反序列化父 ID

标签 java json spring-boot spring-data-jpa jackson

当我具有双向关系时,我无法使用 json 文件填充实体。

父类:

@Entity
@Table(name = ".....")
public class CpoPipeline implements... {

    private String pipelineId;
    private String pipelineSource;
    private String pipelineVersion;
    private Set<CpoPipelineParameter> cpoPipelineParameters;

    @OneToMany(fetch = FetchType.EAGER, mappedBy = "cpoPipeline")
    public Set<CpoPipelineParameter> getCpoPipelineParameters() {
        return this.cpoPipelineParameters;
    }

子类:

@Entity
@Table(name = ".....")
public class CpoPipelineParameter implements ...{

    private String pipelineParameterId;
    private CpoPipeline cpoPipeline;
    private String pipelineParameterName;
    private String pipelineParameterValue;

    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "pipeline_id", nullable = false)
    @JsonIgnore
    public CpoPipeline getCpoPipeline() {
        return this.cpoPipeline;
    }

Json:

{
    "cpoPipeline": {
    "pipelineId": "1",
    "pipelineSource": "C://",
    "pipelineVersion": "2.0",
    "cpoPipelineParameters": [
        {
        "pipelineParameterId": "2",
        "pipelineParameterName": "Process_Group_Variable_Year",
        "pipelineParameterValue": "2020"
        },
        {
        "pipelineParameterId": "1",
        "pipelineParameterName": "Process_Group_Variable_Directory",
        "pipelineParameterValue": "C://"
        }
    ]
    }
}

当我尝试使用 json 文件填充实体时,父 ID 不会进入子实体。
因此,当我尝试坚持时,我收到错误:

17:26:54.714 [main] ERROR o.h.e.jdbc.spi.SqlExceptionHelper - NULL not allowed for column "PIPELINE_ID";
SQL statement:insert into cpo_pipeline_parameter (pipeline_id, pipeline_parameter_name, pipeline_parameter_value, pipeline_parameter_id) values (?, ?, ?, ?)

最佳答案

您需要为每个CpoPipelineParameter设置CpoPipeline。在双向关系中,如果您想将父级与子级保存在一起,则必须为每个子级设置父级以使双方同步。

cpoPipeline.getCpoPipelineParameters().forEach(d -> d.setCpoPipeline(cpoPipeline));

关于java - Jackson - 双向 - 反序列化父 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61280816/

相关文章:

java - 无法创建密码,没有这样的算法

json - 将 Ajax JSON POST 方法绑定(bind)到 KnockoutJS Viewmodel

java - jackson xml 列出被识别为重复键的反序列化

java - Spring提交表单后为空对象(H2、SpringBoot、Thymeleaf、CRUD)

java - 组合@PathVariable和@RequestBody

java - 谁能举例说明如何在java中的InvokeAll() Callable方法中使用Generic?

java - 在任何一种情况下都可以选择执行操作

java - Twitter4j 获取好友时间轴

python - Json 转储字典抛出 TypeError : keys must be a string

java - Spring Boot自定义错误页面在部署在外部容器中时不起作用