0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

detached entity passed to persist

Posted at

@OneToOneアノテーションの保存

public class Order  implements Serializable{
	@Id
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	private Integer id;

	 @OneToOne( fetch = FetchType.EAGER ,cascade = CascadeType.ALL)
     @JoinColumn(name="weddings_tbl_id")
     private WeddingsTbl weddingsTbl;
}

public class WeddingsTbl implements Serializable{
// フィールド省略
}

Orderテーブル
weddings_tbl_id外部キーを持っている
weddings_tblを参照する

Weddings_tblテーブル
外部キーを持っていない

つまり、Orderの中にWeddingsTblエンティティが入っている

orderRepository.save(order, weddingsTbl)でdetached entity passed to persistが発生する

どうやらorderを保存したいけど、weddingsTblの影響を受けているよう。詳しい原因はわからない。。。(どなたか教えていただければ助かります)

エラーが発生している箇所

コントローラー
orderService.create(order);
サービス
public void create(Order order, WeddingsTbl weddingsTbl){
  order.setWeddingsTbl(weddingsTbl);
  orderRepository.save(order); // ここでエラーが発生する
}

まずは参照先のテーブルを保存する!

public void create(Order order, WeddingsTbl weddingsTbl){
  weddingsTbl = weddingsTblRepository.save(weddingsTbl); // これを追加
  order.setWeddingsTbl(weddingsTbl);
  orderRepository.save(order); // ここでエラーが発生する
}

まずは外部キーで参照している先のWeddingsTblエンティティをデータベースに保存する
saveメソッドで返ってくるweddingsTblをorderにセットする

EntityManager によって管理されるEntityオブジェクトは、saveメソッドから返却されたEntityオブジェクトになるので注意すること。

参照
https://terasolunaorg.github.io/guideline/5.0.0.RELEASE/ja/ArchitectureInDetail/DataAccessJpa.html#id25

EntityManager によって管理されるEntityオブジェクトは、saveメソッドの引数に渡したEntityオブジェクトではなく、saveメソッドから返却されたEntityオブジェクトになるので注意すること。

EntityManagerというのが正直わかりませんw
また調べます。

EntityManagerの管理化かどうかが大事みたい

EntityManagerというものがなにかもわかっていない状態なので、DB取得、更新などの操作をするときにエラーが発生するのだろうと思います。

今回に関しては

引数のweddingsTblと
saveメソッドの返り値のweddingsTblは

違うものだということ!!

0
0
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
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?