2012-03-28 21 views
0

EclipseLinkを使用してテーブルの列を更新する方法が不思議です。 EntityManager.merge(myObject);を試してみましたが、EclipseLinkではいくつかの例外がスローされました。他の列をnull値で更新することはできません。 @ChangeTrackingプロパティを自分のクラスに追加しようとしましたが、変更したいカラムを更新するだけで、うまくいきませんでした。EclipseLinkを使用してMySQLのテーブルの列を更新するにはどうすればよいですか?

EclipseLinkを使用してテーブルの列を1つだけ更新するにはどうすればよいですか?

答えて

1

マージが機能しない場合は、新しいインスタンスを最初から作成し、変更する値のみを入力しようとしているためです。これにより、他のすべてのフィールドをマージしてnullにします。すべてのJPA管理フィールドをマージするため、不完全なエンティティにem.mergeを使用しないでください。意図した内容を知る方法がなく、エンティティの状態全体をマージする必要があります。

代わりに、変更を使用して管理対象インスタンスを変更してください。単純な例:

em.getTransaction().begin(); 
YourEntity instance = em.find(YourEntity.class, id); 
instance.setYourAttribute(newValue); 
em.getTransaction().commit(); 

または、EMから読み込んだdetachedインスタンスは、後からem.mergeを使用します。

+0

ありがとうございました!それはうまくいった! @ChangeTrackingはどうですか?それは何ですか、いつ使用するのですか? – Rox

関連する問題