我正在尝试这样的方法,bug会出现并发问题..似乎我的更新方法不会增加我的实体的@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。
提前致谢
答案 0 :(得分: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;
}