如何在JPA中从entitymanager
获取旧实体?
代码:
Address address=em.find(Address.class,1); System.out.println("Name of Address: "+address.getAddressName); // China address.setAddressName("Russia"); Address address1=em.find(Address.class,address.getAddressId()); System.out.println("Name of Address: "+address1.getAddressName); //?????????
我怎样才能得到“中国”的答案?
答案 0 :(得分:4)
使用其他EntityManager。任何特定的EntityManager将只返回具有特定标识的单个对象(缓存在L1缓存中)
答案 1 :(得分:2)
DataNucleus是对的,但我建议使用带查询提示的查询来绕过缓存而不是使用第二个entityManager实例。
请参阅http://wiki.eclipse.org/EclipseLink/UserGuide/JPA/Basic_JPA_Development/Caching/Query_Options
答案 2 :(得分:1)
em.refresh(address1)
应该工作,因为它刷新对象状态从数据库(“中国”)覆盖(“俄罗斯”)对对象所做的更改。
变量address和address1是对同一对象的引用,因此address.getAddressName()和address1.getAddressName()都返回“China”。
数据库仍然具有旧值,直到
em.merge(address);
em.flush();
被称为。{/ p>