В последнее время столкнулся со странной проблемой. Я попытался изящно обработать исключение устаревшего состояния. Но в блоке catch он все равно выдает исключение. Ниже приведен фрагмент кода
public void saveObject(Object ob){
try{
sessionFactory.getCurrentSession().saveOrUpdate(ob);
}catch(org.springframework.orm.hibernate5.HibernateOptimisticLockingFailureException e){
object latestObject = // get latest object from db;
copyFieldsFromObToLatestObject(ob,latestObject);
// print the version of of both object
LOGGER.info(" ui_version="+ob.getVersion().longValue()+"
entity_version="+latestObject.getVersion().longValue());
// the ui _version is less than entity_ version as expected
sessionFactory.getCurrentSession().saveOrUpdate(latestObject); // at this line I still get the same optimistic locking exception
}
}
/**
ob2 is the latest object which contains the correct version hence copying the fields from previous object to this latest object
**/
private void copyFieldsFromObToLatestObject(ob1,ob2){
ob2.setA(ob1.getA())..
so on
}
Может кто-нибудь взглянуть на это. Я не могу понять причину, по которой он все еще выдает исключение оптимистической блокировки после правильной обработки.
EDIT 1: трассировка стека:
В блоке catch вы должны поймать исключение, которое выбрасывается и которое вы хотите обработать. Вы ловите
. Я даже представить не могу, как это компилируется. Попробуйте заменить его именем исключения в трассировке стека?public void saveObject(Object ob){ try{ sessionFactory.getCurrentSession().saveOrUpdate(ob); }catch(org.springframework.orm.hibernate5.HibernateOptimisticLockingFailureException e){ object latestObject = // get latest object from db; copyFieldsFromObToLatestObject(ob,latestObject); // print the version of of both object LOGGER.info(" ui_version="+ob.getVersion().longValue()+" entity_version="+latestObject.getVersion().longValue()); // the ui _version is less than entity_ version as expected sessionFactory.getCurrentSession().saveOrUpdate(latestObject); // at this line I still get the same optimistic locking exception } } /** ob2 is the latest object which contains the correct version hence copying the fields from previous object to this latest object **/ private void copyFieldsFromObToLatestObject(ob1,ob2){ ob2.setA(ob1.getA()).. so on }