3

我正在尝试做这样的方法,错误出现了并发问题..似乎我的更新方法不会增加我的实体的 @Version 属性。

我的代码是这样的:

      @Transactional
      public B save(B bean) {
        if (bean == null || bean.getId() == null) {
            persist(bean);
        } else {
            bean = update(bean);
        }
        return bean;
      }     

      protected final B update(B bean) {
        bean = em().merge(bean);
        em().flush();
        return bean;
      }

这是我的 AbstractDao 的一段代码。em() 方法返回一个由 Guice-Persist 管理的 EntityManager。

另外,我正在使用eclipselink。

提前致谢

4

1 回答 1

1

我用以下代码解决它:

protected final void persist(B bean) {
    em().persist(bean);
}

protected final B update(B bean) {
    bean.setVersion(findById(bean.getId()).getVersion());
    bean = em().merge(bean);
    em().flush();
    return bean;
}

@Transactional
public B save(B bean) {
    if (bean == null || bean.getId() == null) {
        persist(bean);
    } else {
        bean = update(bean);
    }
    return bean;
}
于 2012-06-26T14:41:25.567 回答