mos*_*jig 2 java sql hibernate jpa one-to-many
我试图通过jpa持久化/合并一个全新的对象图,但似乎持久性的顺序是不正确的,因为它试图保存对其父项存在约束的子对象.
public class ObjectA implements Serializable {
...
@OneToMany(cascade = CascadeType.ALL, mappedBy = "objectAId")
private List<ObjectB> objectBList;
...
}
Run Code Online (Sandbox Code Playgroud)
和
public class ObjectB implements Serializable {
...
@JoinColumn(name = "OBJECT_A_ID", referencedColumnName = "ID", nullable = false)
@ManyToOne(optional = false)
private ObjectA objectAId;
...
}
Run Code Online (Sandbox Code Playgroud)
我将创建一个新的实体ObjectA以及几个新的ObjectB实体并将它们添加到对象A.当我合并ObjectA时,我得到以下内容:
org.hibernate.PropertyValueException: not-null property references a null or transient value: com.mycompany.data.ObjectB.objectAId
Run Code Online (Sandbox Code Playgroud)
我错过了什么或做错了什么?
您有责任将双向关系的双方保持在内存中对象的一致状态.换句话说,当你添加ObjectB
时ObjectA.objectBList
,你也应该ObjectB.objectAId
指向相应的ObjectA
.
而且,没有optional = false
你能够没有错误地持久化对象,但是如果ObjectB.objectAId
是,它们之间的关系将不会被持久化null
.之所以会发生这种情况,是因为Hibernate在将数据保存到数据库时会查看关系拥有方的状态,并且在双向一对多关系的情况下,拥有方是"多"方(ObjectB
)
归档时间: |
|
查看次数: |
3194 次 |
最近记录: |