私はデータベーステーブルでCRUDを実行するための簡単なエディタUIを持っています。 Hibernate 5.1では、プロセスは次のようになりました:デタッチされたオブジェクトを永続化するにはどうすればよいですか?
- セッションを作成します。データオブジェクトを読み込みます。セッションをクローズし、オブジェクトをデタッチします。
- デタッチされたオブジェクトを使用して、UIウィジェットを作成します。
- ユーザーは、UIのエントリの追加/編集/削除を許可し、切り離されたオブジェクトを変更できます。
- ユーザーの「保存」アクションで、新しいセッションを作成します。新しい/更新されたオブジェクトをsaveOrUpdate()で永続化します。セッションを閉じます。
- 必要に応じて繰り返します。
Hibernate 5.2は、Hibernate-native APIからJPA APIへの移行を強く推奨します。 JPAでは、分離されたオブジェクトを再接続することはできません。 JPAのEntityManagerからのHibernateセッションを取得し、するsaveOrUpdateを呼び出すためにそれを使用する
- 使用アンラップ:
は回避策がいくつかあります。 JPAの一部ではない機能に依存しているので、私はこのオプションが嫌いです。
- JPA mergeを使用すると永続オブジェクトが更新されますが、関連付けが解除されないようにする必要があります。これは、私に同じオブジェクトの2つのコピーを与えます。一つは永続、一つは分離されています...これは面倒です。
- 手動でマージ操作を実行し、変更されたフィールドを分離オブジェクトから永続オブジェクトにコピーします。これは余分な作業です。
- プロセス全体を通して単一のEntityManagerインスタンスを存続させます。残念ながら、このセッションがまだ開いている間に他のスレッドがCRUD操作を実行し、永続化されたコンテキストをデータベーステーブルと同期させないようにすることができます。だから私はこのアプローチのファンでもありません。
これを行うには良い方法がありますか、それともこれらの唯一のオプションはありますか?
は、そのマージを同意ここに最適なオプションです。 +1 – StanislavL