Сущность / строка обновляется только иногда с помощью Spring / Hibernate?

0

У меня есть таблица, которая обновляется (с меткой времени и user_id) всякий раз, когда кто-то поворачивает "на" устройство. Эта таблица устройств также является "основной" таблицей, содержащей device_ids, device_names и т.д. Я пометил метод с @Transactional от Spring, и у меня есть таблица "devices", помеченная как Entity.

Я ожидал бы, что когда я изменю объект, так как метод будет отмечен как Transactional, когда метод будет закрыт, база данных будет обновлена. Но это не всегда (всегда). Я проверил журналы с моего сервера и не вижу исключений SQL. catalina.out выглядит отлично, и MySQL регистрирует ошибки. Что может быть здесь? Должен ли я явным образом сохранять обновленную сущность до окончания этого метода?

Теги:
spring
hibernate

1 ответ

1
Лучший ответ

Да, так что это закончилось проблемой гонки с двумя потоками. Поскольку один поток начнет транзакцию весной с аннотацией @Transactional, а затем начнется другая, оба они будут иметь одни и те же данные в одной точке, но обычно они совершаются позже, создавая впечатление проблемы с блокировкой строки. Там где-то есть разумное решение: нужно ли это делать ваши транзакции с другим уровнем изоляции, например: Serializable для методов, затрагивающих одну и ту же строку, или только обновление объекта, использующего что-то вроде @DynamicUpdate, но у них обоих есть плюсы/минусы и оба следует учитывать при попытке исправить какое-то странное состояние гонки, как то, с чем я столкнулся.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню