繁体   English   中英

使用JPA(hibernate)和简单的oneToMany无法持久保存新的对象图 - ManyToOne关系

[英]Unable to persist new object graph using JPA (hibernate) with simple oneToMany - ManyToOne relationship

我试图通过jpa持久化/合并一个全新的对象图,但似乎持久性的顺序是不正确的,因为它试图保存对其父项存在约束的子对象。

public class ObjectA implements Serializable {
  ...
  @OneToMany(cascade = CascadeType.ALL, mappedBy = "objectAId")
  private List<ObjectB> objectBList;
  ...
}

public class ObjectB implements Serializable {
  ...
  @JoinColumn(name = "OBJECT_A_ID", referencedColumnName = "ID", nullable = false)
  @ManyToOne(optional = false)
  private ObjectA objectAId;
  ...
}

我将创建一个新的实体ObjectA以及几个新的ObjectB实体并将它们添加到对象A.当我合并ObjectA时,我得到以下内容:

org.hibernate.PropertyValueException: not-null property references a null or transient value: com.mycompany.data.ObjectB.objectAId

我错过了什么或做错了什么?

您有责任将双向关系的双方保持在内存中对象的一致状态。 换句话说,当你添加ObjectBObjectA.objectBList ,你也应该ObjectB.objectAId指向相应的ObjectA

此外,如果没有optional = false您将能够持久保存对象,但如果ObjectB.objectAIdnull ,则它们之间的关系将不会ObjectB.objectAId 之所以发生这种情况,是因为Hibernate在将数据保存到数据库时会查看关系所属方面的状态,而在双向一对多关系的情况下,拥有方是“多”方( ObjectB

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM