多分これは簡単な答えの質問です...しかし、私はそれを実行していません。persist() で、子テーブルの参照キーが null であるという例外が発生します (もちろん、データベースでは許可されていません)。レシピと準備のためのいくつかの手順があります。
私は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
}
上記のコードは有効な回避策です。ただし、クリーンな (そしてサポート可能な) コードを作成するには、関係は、すべての子を参照する親のコレクションとの一方向のみにする必要があります。