0
2

More than 3 years have passed since last update.

【JPA】一対多のリレーションシップがあるEntityをmany側ごとCreateができない

Posted at

事象

@OneToMany + @JoinColumnで定義したEntityをmany側のEntityごとCreateしたい。

→エラーが発生してしまう。

原因

以下記事にて解説されていました。

JPA マッピングカタログ - Qiita

  • 自分が確かめた限りでは、これが確実に動くのは検索のみ
  • table_beta.alpha_id が NULL 不可の場合、上記実装だと INSERT 時にエラーになる(table_beta.alpha_id に NULL をセットしようとしてエラーになる)。
    • Hibernate であれば、 @JoinColumnnullable=false を設定することで INSERT, や DELETE も動くようになる。
    • Eclipse Link では、 nullable=false を設定してもやはり INSERT でエラーになった。
  • table_beta.alpha_id が NULL 可の場合は、 Eclipse Link, Hibernate ともに上記実装で INSERT, DELETE が動作した。

JPA における一対多のリレーションシップ - EclipseLink - なんとなくな Developer のメモ

(a) の単方向の場合、データ登録時に下記のような挙動となるため、product_id へ外部キー制約を付けたりすると不都合が生じます。 (product_id のデフォルト値を 0 としているのもそのためです)
(1) product_id を指定せずに product_variation へ insert 文を実行
(2) update 文で product_id を設定

なるほど、先にidをnullでinsertしたあとにupdateを行うんですね。
Eclipse Linkを使用しているのでお手上げそうです。

解決

many側のidのNULL制約を外しました。

同じエラーにあたった人の参考になると幸いです。

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2