[英]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
我错过了什么或做错了什么?
您有责任将双向关系的双方保持在内存中对象的一致状态。 换句话说,当你添加ObjectB
到ObjectA.objectBList
,你也应该ObjectB.objectAId
指向相应的ObjectA
。
此外,如果没有optional = false
您将能够持久保存对象,但如果ObjectB.objectAId
为null
,则它们之间的关系将不会ObjectB.objectAId
。 之所以发生这种情况,是因为Hibernate在将数据保存到数据库时会查看关系所属方面的状态,而在双向一对多关系的情况下,拥有方是“多”方( ObjectB
)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.