如何从JPA中的entitymanager获取旧实体?

时间:2013-04-22 06:30:21

标签: java jpa

如何在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); //?????????

我怎样才能得到“中国”的答案?

3 个答案:

答案 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>