Превышено время ожидания блокировки; попробуйте перезапустить транзакцию - Dropwizard и Hibernate
Я занимаюсь разработкой приложения dropwizard и базы данных mysql. Я иногда вижу ошибку
Lock wait timeout exceeded; try restarting transaction
при обновлении строк в чертичной таблице. Значение lock_timeout на стороне базы данных установлено равным 120 с, что кажется разумным. Поскольку эта таблица является наиболее часто обновляемой таблицей, это вызывает блокировки потоков (я полагаю). Что является лучшим способом сохранить транзакцию. В настоящее время вот код
public void createOrSave(MyTable myTable) {
MyTable existing = getById(service.id);
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
try {
if (existing != null) {
session.merge(myTable);
} else {
session.save(myTable);
}
tx.commit();
} catch (RuntimeException e) {
if (tx!=null) {
tx.rollback();
}
throw e;
} finally {
session.close();
}
}
Ошибка брошена на session.save()
вызов. Как мне это оптимизировать?