事象
@OneToMany
+ @JoinColumn
で定義したEntityをmany側のEntityごとCreateしたい。
→エラーが発生してしまう。
原因
以下記事にて解説されていました。
- 自分が確かめた限りでは、これが確実に動くのは検索のみ。
-
table_beta.alpha_id
が NULL 不可の場合、上記実装だと INSERT 時にエラーになる(table_beta.alpha_id
に NULL をセットしようとしてエラーになる)。- Hibernate であれば、
@JoinColumn
にnullable=false
を設定することで INSERT, や DELETE も動くようになる。 - Eclipse Link では、
nullable=false
を設定してもやはり INSERT でエラーになった。
- Hibernate であれば、
-
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制約を外しました。
同じエラーにあたった人の参考になると幸いです。