我在 EclipseLink(2.3.0) 上踢轮胎,发现一些似乎严重错误的东西。我的问题是,当从共享缓存命中返回一个实体时,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