1

JPAアプリケーションにいくつかのタイプのエンティティがあり、データベース関連のすべての操作を実行するリポジトリがあるとします。

アタッチされていないエンティティが外部から渡されることがあり、それらのアタッチされたコピーを取得したい場合があります(たとえば、このエンティティへの参照を含む新しいエンティティを永続化するため、または遅延プロパティにアクセスするため)。

EntityManager.refresh(entity)アタッチされていないオブジェクトでは機能しません。EntityManager.merge(entity)必要に応じて、データベースから現在の値を取得する代わりに、デタッチエンティティの現在の状態をコピーします。EntityManager.find(entity.getId(), entityClass)動作し、それが私が今していることですが、それはエンティティのタイプによって異なります(私が考えると、EntityManager.find(entity.getId(), entity.getClass())より良いですが)。それを行う他の方法はありますか?

4

1 に答える 1

1

マージして更新できます。 entityManager.refresh(entityManager.merge(entity));

mergeは管理対象エンティティを提供しrefresh、DBから値を取得するために使用できます。

このコードは、アタッチされたエンティティとデタッチされたエンティティの両方で機能するはずです。

于 2012-07-24T19:44:21.973 に答える