[解決済み] JPA Hibernateを使った子オブジェクトの自動保存
2023-06-16 13:33:52
質問
親テーブルと子テーブルの間に一対多の関係を持っています。 親オブジェクトに
List<Child> setChildren(List<Child> childs)
また、Childテーブルには外部キーがあります。この外部キーは、データベース内の親の行を参照するIDです。 そのため、私のデータベース設定では、この外部キーはNULLにすることができません。 また、この外部キーは親テーブルの主キーでもあります。
そこで質問ですが、次のような方法で自動的に子オブジェクトを保存することができます。
session.save(parent);
上記を試してみましたが、Childテーブルの外部キーフィールドはNULLではありえないというデータベースエラーが発生します。子オブジェクトを自動的に保存できるように、JPAにこの外部キーを子オブジェクトに自動的に設定するよう指示する方法はありますか?
事前にありがとうございます。
どのように解決するのですか?
<ブロッククオート上記を試してみましたが、Childテーブルの外部キーフィールドはNULLではありえないというデータベースエラーが発生します。子オブジェクトを自動的に保存できるように、JPAにこの外部キーを子オブジェクトに自動的に設定するよう指示する方法はありますか?
さて、ここには2つのことがあります。
まず、保存操作をカスケードする必要があります (しかし、私の理解では、これを実行しているか、または "子テーブルへの挿入中に FK 制約違反が発生しないかです)。
次に、おそらく双方向の関連付けがあり、"リンクの両側" を正しく設定していないのだと思います。このようなことをすることになっています。
Parent parent = new Parent();
...
Child c1 = new Child();
...
c1.setParent(parent);
List<Child> children = new ArrayList<Child>();
children.add(c1);
parent.setChildren(children);
session.save(parent);
よくあるパターンは、リンク管理の方法です。
@Entity
public class Parent {
@Id private Long id;
@OneToMany(mappedBy="parent")
private List<Child> children = new ArrayList<Child>();
...
protected void setChildren(List<Child> children) {
this.children = children;
}
public void addToChildren(Child child) {
child.setParent(this);
this.children.add(child);
}
}
そして、コードはこうなる。
Parent parent = new Parent();
...
Child c1 = new Child();
...
parent.addToChildren(c1);
session.save(parent);
参考文献
- Hibernateコアリファレンスガイド
関連
-
Eclipseは、ポップアップA Java Exception has occurred.を実行し、エラーException in threadの解決策を報告します。
-
[解決済み] PersistentObjectException: JPAとHibernateが投げるpersistに渡されたデタッチド・エンティティー
-
Solve モジュールのビルドに失敗しました。Error: ENOENT: no such file or directory エラー
-
java -jarコマンドでパッケージを実行すると、無効または破損したjarfile xxxx.jarが表示される。
-
maven レポート エラー 解決不可能な親POM
-
eclipse 実行 Java、エラー: 選択を起動できず、レシーバーもありません。
-
Java:未解決コンパイル問題の解決方法
-
[解決済み] SQL Serverでレコードを削除した後、IDシードをリセットする。
-
[解決済み] JPA OneToManyで子が削除されない
-
[解決済み] Hibernate JPA シーケンス(非Id)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
javaの非静的メソッドを静的に参照することができない
-
Solve モジュールのビルドに失敗しました。Error: ENOENT: no such file or directory エラー
-
強制型変換について
-
Java Notes 005_この行に複数のマーカーがある - キーを変数に解決できない - シンタックスエラー、ins
-
SpringBoot 起動エラー java.nio.charset.MalformedInputException: 入力長 = 2 解決
-
セミコロン期待値エラー解決
-
List list = new ArrayList(); Error: ArrayList は型に解決できません。
-
X11 DISPLAY変数が設定されていない」問題の解決方法
-
Java Runtime Environmentを継続するためのメモリが不足しています。
-
linux ant Resolve error: main class not found or couldn't be loaded org.apache.tools.ant.launcher.