3

私のSpringアプリケーションには、XMLを読み取り、たとえばJPAを介してOrganizationエンティティをフェッチし、XMLで見つかったフィールドをOrganizationに更新して、Organizationを返すコードがあります。

しかし、このようなコードでは:

Organization updated = mergeToOrganization(jaxbOrganizationPojo, originalOrganization);

直接変更するmergeToOrganizationのではなく、の保護コピーを作成することからメソッドを開始する必要があると本当に感じています。originalOrganization直接突然変異は私を汚く感じさせます。しかし、それに代わるものは、大ざっぱな反射やボイラープレートコードの取得/設定の大雑把なもののようです。

アイデア?意見?

4

2 に答える 2

9

トランザクションを適切に処理する限り、直接ミューテーションの問題はわかりません。ただし、JPA 2.0を使用していると仮定して、永続コンテキストからエンティティを削除する場合は、 EntityManager.detach()を使用できます。このように、技術的には、エンティティが「ダーティ」とマークされることはなく、それについて気分を害する必要はありません。merge()また、を使用して保存するのではなく、必ず使用してください。そうしないpersist()と、多くの厄介な例外が発生します。

編集エンティティの新しいコピーを返したい場合、これまでに見た中で最も防弾のクローン作成方法は、ObjectOutputStreamを使用することです:http://javatechniques.com/blog/faster-deep-copies-of-java -オブジェクト/

于 2013-01-22T06:51:43.693 に答える
1

もう1つのオプションは、独自のclone()メソッドを使用することです。または、EclipseLinkを使用している場合は、copy()APIを使用できます。

http://wiki.eclipse.org/EclipseLink/Examples/JPA/AttributeGroup#Copy_Examplesを参照して ください。

于 2013-01-22T14:04:21.057 に答える