2

如何从entitymanagerJPA 中获取旧实体?

代码:

    地址address=em.find(Address.class,1);
    System.out.println("地址名称:"+address.getAddressName); // 中国
    address.setAddressName("俄罗斯");
    地址address1=em.find(Address.class,address.getAddressId());
    System.out.println("地址名称:"+address1.getAddressName); //?????????

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

4

3 回答 3

4

使用不同的 EntityManager。任何特定的 EntityManager 只会返回具有特定身份的单个对象(缓存在 L1 缓存中)

于 2013-04-22T06:37:31.907 回答
2

DataNucleus 是正确的,但我建议使用带有查询提示的查询来绕过缓存,而不是使用 entityManager 的第二个实例。

请参阅http://wiki.eclipse.org/EclipseLink/UserGuide/JPA/Basic_JPA_Development/Caching/Query_Options

于 2013-04-22T06:59:04.150 回答
1

em.refresh(address1)

应该可以工作,因为它从数据库(“中国”)覆盖(“俄罗斯”)对对象所做的更改刷新对象状态。

变量 address 和 address1 引用同一个对象,所以 address.getAddressName() 和 address1.getAddressName() 都返回“中国”。

em.merge(address); em.flush();数据库在被调用之前仍然具有旧值 。

于 2013-04-22T12:49:08.680 回答