1つのエンティティ(1つのテーブルのOneToMany、親-子の関係)でリレーションシップを作成しようとすると、次のクラスがあります。
public class MenuItem {
@Id
@GeneratedValue
private long Id;
private String content;
private String name;
@ManyToOne(cascade = { CascadeType.ALL })
@JoinColumn(name="parent")
private MenuItem parent;
@OneToMany(cascade = CascadeType.ALL, mappedBy="parent")
private Set<MenuItem> childrens = new HashSet<MenuItem>();
//getters and setters
}
データの読み込みは正常に機能しますが、MenuItemを保存しようとすると、次のエラーが発生します。
「フィールド'childrens_id'にはデフォルト値がありません」
HibernateはMenuItemのcorrest値を保存しようとしますが(ログに表示されます)、別のテーブルに参加して最終的にトランザクションを作成しようとして失敗したと思います。
これは、http://www.roseindia.net/hibernate/hibernate4/OnetoManySelfJoin.shtmlで正確に示されて いますが、機能し ていません。Hibernate4.1.1とTomcatサーバー7を使用しました。
解決済み:データベースを削除して再度作成します。