【问题标题】:Jackson - Bidirectional - Deserialization Parent IdJackson - 双向 - 反序列化父 ID
【发布时间】:2020-07-31 11:56:09
【问题描述】:

当我有双向关系时,我无法用 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] 错误 o.h.e.jdbc.spi.SqlExceptionHelper - “PIPELINE_ID”列不允许为 NULL;
SQL语句:插入cpo_pipeline_parameter(pipeline_id, pipeline_parameter_name, pipeline_parameter_value, pipeline_parameter_id)值(?, ?, ?, ?)

【问题讨论】:

  • 缺少CascadeType.ALL

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


【解决方案1】:

您需要为每个CpoPipelineParameter 设置CpoPipeline。在双向关系中,如果您想保存父母与孩子,那么您必须为每个孩子设置父母以使双方同步。

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

【讨论】:

  • 有没有办法通过注释或其他方式自动执行此操作?因为这只是我的 json 文件的一部分,但实际上我正在导入一个大 json 文件。
  • 不。你必须同步双方,这个操作不是很昂贵。很多人都面临同样的问题,看看stackoverflow.com/questions/61293079/…
  • 你试过这个解决方案了吗?
  • 这个解决方案可行,但我正在尝试一个更好的解决方案,因为我正在通过 json 文件进行导出和导入过程,正如我所说,我有一个包含 30 个表的大 json 文件为每个 @Abinash 做这个。
  • @AldoInáciodaSilva 据我所知,没有更好的解决方案。如果你发现任何必须告诉我。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-01-25
  • 2019-09-17
  • 2021-01-19
  • 1970-01-01
  • 2013-01-01
  • 2016-12-11
  • 1970-01-01
相关资源
最近更新 更多