Я знаю, что есть некоторые вопросы по этому вопросу уже, но я думаю, что это другое.JPA Version Entity merge
Скажем, у меня есть этот класс:
@Entity
public class foo{
@Id
@GeneratedValue
private long id;
@Version
private long version;
private String description;
...
}
Они создать некоторые объекты и сохраняются их к БД с помощью JPA добавить().
Позже я получаю все из репозитория, используя JPA all(); Из этого списка я выбираю один объект и изменяю описание.
Затем я хочу обновить этот объект в репозитории, используя JPA merge() (см. Код).
Проблема в том, что она работает в первый раз, когда я пытаюсь изменить описание (значение версии теперь 2). Во второй раз возникает оптимистическое исключение Exclusive, говорящее, что этот объект был изменен тем временем.
Я использую H2, имеет БД во встроенном режиме.
MERGE КОД:
//First: persist is tried, if the object already exists, an exception is raised and then this code is executed
try {
tx = em.getTransaction();
tx.begin();
entity = em.merge(entity);
tx.commit();
} catch (PersistenceException pex) {
//Do stuff
}
Что может быть не так, где?
спасибо.
РЕДАКТИРОВАТЬ (больше кода)
// Foo б получают путем получать все объекты из БД с помощью JPA все(), а затем один объект, выбранный из этого списка
b.changeDescription (» Что-то новое!");
// метод обновления вызовов (Merge код уже отвечал)
вы пробовали em.persist вместо слияния? Метод слияния отслеживает объект после обновления. В зависимости от вашей конфигурации возможно, что обновление уже отправлено в БД. – fhofmann
Опубликовать еще код. Релевантно, как вы загружаете и модифицируете объект и как вы вызываете код, который вы опубликовали. –
@AlanHay Я отредактировал исходное сообщение с еще одним кодом, который представляет мою ситуацию. –