2013-11-02 10 views
6

アンマネージドエンティティを別のパーシステンスコンテキストで管理するようにしたいと思います。jpaマージされていないエンティティ

em.merge(user); 

しかし、私はこれを行う場合には、コンテキストに追加されていない:私は、これは、マージを行うことができることを読ん

boolean isManaged = em.contains(user); 

は常にfalseです。私は次のようにする場合であっても

User dbuser = em.find(User.class, user.getId()); 
em.merge(user); 
boolean isManaged = em.contains(user); 

DBUSERおよびユーザーはまったく同じです。

私は間違っていますか?

私はJPAは、MySQL DBは、JBoss EAP 6.1

+3

トランザクションを開始してコミットしましたか?さらに、次のようにします: 'dbuser = em.merge(user);' – Sam

+0

JPA(Springなどなし、またはHibernateなし)を使ってトランザクションを開始できますか?私はちょうど@TransactionManagement(TransactionManagementType.CONTAINER)を使用します。 – Dave

+0

'.begin()'、 '.commit()'、 '.rollback()'を呼び出すために 'em.getTransaction()'でトランザクションオブジェクトを取得できます。ただし、コンフィグレーションでは、JTA EntityManagerを使用する場合には、これは必須ではなく、不可能かもしれません。 – Sam

答えて

0

データベースにあなたのマージアクションをコミットするコールentityManager.flush()を使用しています。

通常、コミットは遅延します。たとえば、メソッドに@TransactionAttributeアノテーションがある場合です。メソッドは、メソッドの終了後にコミットされます。しかし、コミットせずにem.contains(user)に電話すると、古い状態になります。

関連する問題