也许这是一个很容易回答的问题......但我没有让它运行。在persist() 中,我得到子表中的引用键为空的异常(数据库当然不允许这样做)。我有一个食谱和一些准备步骤。
我正在使用 EclipseLink 2.4.1
Recipe.java(rcpid 由 JPA 自动设置)
@Entity
public class Recipe {
@Id
long rcpid;
List<Recipestep> recipesteps = new ArrayList<>();
@OneToMany(
cascade=CascadeType.ALL,
fetch=FetchType.EAGER,
mappedBy="recipe",
targetEntity=Recipestep.class )
// This does NOT work. Following line tries to access a join-table !!!
// @JoinColumn(name="rcpid", referencedColumnName="rcpid")
public List<Recipestep> getRecipesteps() { return recipesteps; }
// some more attributes, getters and setters
}
Recipestep.java(rpsid 由 JPA 自动设置)
@Entity
public class Recipestep {
@Id
long rpsid;
Recipe recipe;
@ManyToOne( targetEntity=Recipe.class )
@JoinColumn( name="rcpid" )
public Recipe getRecipe() { return recipe; }
// some more attributes, getters and setters
}
上面的代码是一个有效的解决方法。然而,为了拥有干净(且可支持)的代码,这种关系应该只是单向的,即父级中的集合引用其所有子级。