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 に答える