Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.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 两次映射到子表-@OneToMany&@多对一_Java_Hibernate_Jpa - Fatal编程技术网

Java 两次映射到子表-@OneToMany&@多对一

Java 两次映射到子表-@OneToMany&@多对一,java,hibernate,jpa,Java,Hibernate,Jpa,我正在尝试建模一个父实体,它有一个子实体集合(childHistory)和一个指向最后添加的子实体(currentChild)的指针 类父类{ //单向的 @OneTONE(cascade=CascadeType.PERSIST,可选=false) @JoinColumn(name=“current\u child\u id”) 独生子女; //双向的 @OneToMany(mappedBy=“家长”) 私人名单儿童历史; 公共家长(){ currentChild=新的子项(此项); child

我正在尝试建模一个父实体,它有一个子实体集合(childHistory)和一个指向最后添加的子实体(currentChild)的指针

类父类{
//单向的
@OneTONE(cascade=CascadeType.PERSIST,可选=false)
@JoinColumn(name=“current\u child\u id”)
独生子女;
//双向的
@OneToMany(mappedBy=“家长”)
私人名单儿童历史;
公共家长(){
currentChild=新的子项(此项);
childHistory=newarraylist();
添加(currentChild);
}
公共无效添加(){
currentChild=新的子项(此项);
childHistory=newarraylist();
添加(currentChild);
}
}
班童{
@多通(可选=假)
@JoinColumn(name=“parent\u id”)
私人家长;
公共子女(父母对等){
this.parent=parent;
}
}
当前,当我试图保存父实体(并指望级联来持久化子实体)时,我得到了一个瞬态实体的异常。我无法事先保存父级,因为我初始化了父级中的所有内容

警告(导致异常…):

警告:HH000437:正在尝试保存一个或多个具有 与未保存的临时实体的不可空关联。未得救的人 在保存临时实体之前,必须先将其保存在操作中 从属实体。未保存的临时实体:
([com.Parent#])
从属实体:
([[com.Child#]])
不可为空 关联:
([com.Child.entity])


警告:HH000437:正在尝试保存一个或多个具有 与未保存的临时实体的不可空关联。未得救的人 在保存临时实体之前,必须先将其保存在操作中 从属实体。未保存的临时实体:
([com.Child#])
从属实体:
([[com.Parent#]])
不可为空 关联:
([com.Parent.currentChild])

是否有一种方法可以正确地对此进行建模,并且在hibernate中没有空db列


编辑:有关复制,请参见以下要点:

例外情况是指保存临时实体,这意味着您正试图保存与非托管实体相关的实体,因为您的父级正在级联一个子级,那么问题将在于子级历史,由于这是一种双向关系,因此也会使子对象级联

@OneToMany(mappedBy = "parent",cascade=CascadeType.PERSIST)
private List<Child> childHistory;
@OneToMany(mappedBy=“parent”,cascade=CascadeType.PERSIST)
私人名单儿童历史;

如何保存实体
em.persist(新父项())我省略了一些给定的细节(id、entitymanager等)您是否可以共享您的服务“我看不出重点”。重点是它将清楚地显示问题的根本原因,即您在保存之前没有设置双向关系的双方。我用要点更新了问题,以重现问题。不是问题-错误不是NRE。现在问题已解决。我将尝试提出一个示例项目。无论我如何移动级联,都无法解决该问题。即使使用级联,也会出现暂时性问题?在保存父实例时,在关系child>parent上进行级联将不会产生任何效果。因此,是否尝试保存子实例?
@OneToMany(mappedBy = "parent",cascade=CascadeType.PERSIST)
private List<Child> childHistory;