无法刷新缓存中的只读实体

时间:2014-08-28 21:14:19

标签: java-ee jpa eclipselink jpa-2.0

我想使用实体注释将JPA实体定义为只读以防止更新。但由于它通过对数据库的另一次更新来改变偶尔的更改,我希望能够刷新缓存的对象。

但是,当我尝试执行以下代码时,出现IllegalArgumentException:'无法刷新未管理的对象'在调用refresh()时被抛出:

public <T> T refresh(EntityManager em, Class<T> className, Long primaryKey) {
    T t = em.find(className, primaryKey);
    LOGGER.debug("object={}, contained={}", t, em.contains(t));
    em.refresh(t);
    return t;
}

事实证明,即使我从EntityManager中检索了实体对象,debug语句也表明该实体不包含在EntityManager中,因此无法刷新。

有没有办法刷新缓存中的只读实体?


请注意,如果从实体类定义中删除@Readonly属性,则EntityManager.refresh调用会成功将对象同步到其数据库值。我使用内置的eclipselink缓存机制。

0 个答案:

没有答案