3

私は EclipseLink(2.3.0) でタイヤを蹴っていますが、ひどく間違っていると思われるものを見つけました。私の問題の正味は、Entity が共有キャッシュ ヒットから返されたときjava.util.Date(およびおそらく他のもの) が期待どおりにコピーされないことです。日付フィールドは不変ではなく、共有できないため、これはかなり厄介な結果をもたらします....しかし、何かが足りないのではないでしょうか? プロパティを設定していませんが-javaagent、JSE 環境でウィーバーを使用しています。

テスト スニペット:

// Setup
EntityManager em = emf.createEntityManager();
Person p = new Person(2);
java.util.Date d = new java.util.Date();
p.setDate(d);

em.getTransaction().begin();
em.persist(p);
em.getTransaction().commit();
em.close();

// Get a fresh em
EntityManager em1 = emf.createEntityManager();

Person p1 = em1.find(Person.class, p.getId()); // cache hit
java.util.Date d1 = p1.getDate();

assertFalse(p == p1); // Make sure we have different entities
// The next line fails! For some odd reason different Entities are sharing the same date.
assertFalse(d == d1); // make sure each Entity instance has different date instances
4

1 に答える 1

0

これについては、こちらの EclipseLink ドキュメントで説明されています: http://wiki.eclipse.org/Introduction_to_EclipseLink_Application_Development_(ELUG)#Mutability

簡単な回答: シリアル化されていない基本のほとんどは不変として扱われますが、EclipseLink @Mutable アノテーションを使用して可変として扱うように構成できます: http://eclipse.org/eclipselink/documentation/2.4/jpa/extensions/a_mutable.htm

于 2012-10-11T15:08:35.160 に答える