3
Я пытаюсь сделать такой метод, ошибка возникла при проблемах с параллелизмом .. похоже, что мой метод обновления не увеличивает атрибут @Version моего объекта Entity.Как реализовать общий метод saveOrUpdate с EclipseLink и JPA2
Мой код так:
@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() возвращает EntityManager, которым управляет Guice-Persist.
Кроме того, я использую eclipselink.
заранее спасибо
Я не уверен, что это отличная идея. Номер версии может быть значительно устаревшим, когда этот поток прочитал его, и теперь вы вручную переписываете его самой последней версией, хотя это может быть законно устарело. Вместо этого вы можете просто использовать em.merge() для всех случаев в Save и вернуть управляемый объект, который он возвращает для изменений. Если у вас проблемы с версией, попробуйте найти объект, используя find, прежде чем вносить изменения, а не использовать устаревшую отдельную копию. – Chris
Хмм, у вас есть пример кода для этого? Благодарю. – caarlos0
Я забыл сказать, что это веб-приложение, поэтому я использую сеанс-за-запрос и DTO ... – caarlos0