Я хочу увеличить поле в таблице базы данных на 1, используя Hibernate.
Я могу сделать это, просто загружая объект, увеличивая значение и обновляя объект, однако, если появляется другой поток и обновляет поле между загрузкой и обновлением, тогда значение будет искажено.
Поэтому вместо этого я вызвал обновление непосредственно в базе данных:
Query updateHits = createQuery(
"UPDATE Job SET hitCount = hitCount + 1 WHERE id = :jobId" );
updateHits.setInteger( "jobId", job.getId() );
updateHits.executeUpdate();
Однако я понимаю, что это исключает оптимистичную блокировку в базе данных, и я в настоящее время испытываю проблему с взаимоблокировками на SQL-сервере, и я считаю, что это преступник.
Есть ли способ увеличить поле без непосредственного вызова обновления и при сохранении целостности данных?