【问题标题】:Spring Data JPA One to Many relationship not saving child tableSpring Data JPA 一对多关系不保存子表
【发布时间】:2014-04-24 11:03:18
【问题描述】:

父实体

@OneToMany(fetch = FetchType.EAGER, mappedBy = "paramRef", cascade=CascadeType.ALL)
public Set getParamList() { return this.paramList; }

子实体

@ManyToOne(fetch = FetchType.EAGER) @JoinColumn(name = "param_Ref_Id", nullable = false, insertable=false, updatable=false)
public ParamRef1 getParamRef() { return this.paramRef; }

要持久化的代码

ParamRef1 pr = new ParamRef1();
pr.setName("TEST PARAM");

Param1 p1 = new Param1() p1.setParamValue("ONE") p1.setParamRef(pr);
Param1 p2 = new Param1() p2.setParamValue("TWO") p2.setParamRef(pr);

Set paramList = new HashSet() paramList.add(p1) paramList.add(p2)

pr.setParamList(paramList)

pr = paramRefDao1.save(pr)

如果步骤正确,请告诉我。我收到以下异常。并且无法理解为什么父 ID 在子表中不可用

引起:org.hibernate.exception.ConstraintViolationException: 无法将值 NULL 插入列“PARAM_REF_ID”,表 '参数';列不允许空值。插入失败。

【问题讨论】:

    标签: java sql-server spring hibernate jpa


    【解决方案1】:

    您缺少父表的列 PARAM_REF_ID 的值

    ParamRef1 pr = new ParamRef1();
    pr.setName("TEST PARAM");
    pr.setParamRefId(1); // replace 1 with any other valid id as value
    

    【讨论】:

    • 您好,感谢您的回复。实际上,我在我的 ms sql 服务器中为我的父表和子表使用 Identity。所以我的父表在存储 PK 字段值方面没有任何问题。但同时,在持久化子表时,父键 id 不可用。猜猜我的代码中有什么遗漏或错误?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-10
    • 2018-04-14
    • 2017-08-19
    • 1970-01-01
    • 1970-01-01
    • 2018-08-21
    • 1970-01-01
    相关资源
    最近更新 更多