jl.*_*jl. 5 java hibernate jpa
我正在尝试建模一个父实体,该实体具有子实体的集合(childHistory)以及指向最后添加的子实体(currentChild)的指针
class Parent {
//unidirectional
@OneToOne(cascade = CascadeType.PERSIST, optional = false)
@JoinColumn(name = "current_child_id")
private Child currentChild;
//bidirectional
@OneToMany(mappedBy = "parent")
private List<Child> childHistory;
public Parent() {
currentChild = new Child(this);
childHistory = new ArrayList<>();
childHistory.add(currentChild);
}
public void add() {
currentChild = new Child(this);
childHistory = new ArrayList<>();
childHistory.add(currentChild);
}
}
class Child {
@ManyToOne(optional = false)
@JoinColumn(name = "parent_id")
private Parent parent;
public Child(Parrent parent) {
this.parent = parent;
}
}
Run Code Online (Sandbox Code Playgroud)
目前,当我尝试保存父级(并依靠级联来持久化子级)时,我遇到了瞬态实体的异常。我无法事先保存父级,因为我初始化了父级构造函数中的所有内容。
警告(导致异常......):
警告:HHH000437:尝试保存与未保存的瞬态实体具有不可为空关联的一个或多个实体。在保存这些依赖实体之前,必须在操作中保存未保存的瞬态实体。未保存的临时实体:
([com.Parent#<null>])相关实体:([[com.Child#<null>]])不可为 null 的关联:([com.Child.entity])
警告:HHH000437:尝试保存与未保存的瞬态实体具有不可为空关联的一个或多个实体。在保存这些依赖实体之前,必须在操作中保存未保存的瞬态实体。未保存的临时实体:
([com.Child#<null>])相关实体:([[com.Parent#<null>]])不可为 null 的关联:([com.Parent.currentChild])
有没有一种方法可以正确地对此进行建模,并且在 hibernate 中具有 NOT NULL 数据库列。
编辑:有关重现,请参阅此要点:https://gist.github.com/jlogar/2da2237640aa013f2cfbda33a4a5dc84
例外是指保存瞬态实体,这意味着您正在尝试保存与非托管实体有关系的实体,因为您的父级正在级联 onetoone 子级,那么问题将出在 childHistory 上,因为这是一个双向关系,它会让孩子们也能级联起来
@OneToMany(mappedBy = "parent",cascade=CascadeType.PERSIST)
private List<Child> childHistory;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
753 次 |
| 最近记录: |