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