Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法使用JPA(hibernate)和简单的一对一-多对一关系来持久化新的对象图_Java_Sql_Hibernate_Jpa_One To Many - Fatal编程技术网

Java 无法使用JPA(hibernate)和简单的一对一-多对一关系来持久化新的对象图

Java 无法使用JPA(hibernate)和简单的一对一-多对一关系来持久化新的对象图,java,sql,hibernate,jpa,one-to-many,Java,Sql,Hibernate,Jpa,One To Many,我试图通过jpa持久化/合并一个全新的对象图,但持久化的顺序似乎不正确,因为它试图保存对其父对象存在约束的子对象 public class ObjectA implements Serializable { ... @OneToMany(cascade = CascadeType.ALL, mappedBy = "objectAId") private List<ObjectB> objectBList; ... } 我将创建一个新实体ObjectA和几个新的Obj

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

public class ObjectA implements Serializable {
  ...
  @OneToMany(cascade = CascadeType.ALL, mappedBy = "objectAId")
  private List<ObjectB> objectBList;
  ...
}
我将创建一个新实体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
,则它们之间的关系将不会持久化。之所以会发生这种情况,是因为Hibernate在将关系保存到数据库时会查看其拥有方的状态,而在双向一对多关系的情况下,拥有方是“多”方(
ObjectB

+1。还要注意,关系的所有者端是不带mappedBy属性的一方。所以,Hibernate要考虑的是从B到A的关系,而不是从A到BYou是正确的,先生。我未能正确解释这个例外。我用
ObjectA
设置了
ObjectB.objectAId
,并且它按预期保持。谢谢仅供参考-有一篇关于双向关系的博文,博文中有很多与JPA相关的博文。。。
org.hibernate.PropertyValueException: not-null property references a null or transient value: com.mycompany.data.ObjectB.objectAId