Когда мы вызываем transaction.rollback (), Hibernate откатывает транзакцию базы данных. База данных выполняет откат, таким образом удаляя вновь созданный объект. Но я не могу понять, следует ли использовать откат в блоке catch, даже если у нас есть только одна вставка или обновление строки в одной таблице.
Например, в этом Коде процедура написана только для записи / обновления данные в одной таблице:
public Map<String, Object> updateSOSDetails(SOSUserDetails sosUserDetails) {
Map<String, Object> result = new HashMap<>();
result.put(Constants.RESULT, false);
Session session = null;
try {
Map<String, Object> output = null;
session = cityAppSessionFactory.openSession();
Query query = session.createNativeQuery("EXEC update_sos_details :userId,:contactName1,"
+ ":contactNumber1,:contactRelation1,:contactName2,:contactNumber2,:contactRelation2");
query.setParameter(Constants.USERID, sosUserDetails.getUserId());
query.setParameter("contactName1", sosUserDetails.getContactName1());
query.setParameter("contactNumber1", sosUserDetails.getContactNumber1());
query.setParameter("contactRelation1", sosUserDetails.getContactRelation1());
query.setParameter("contactName2", sosUserDetails.getContactName2());
query.setParameter("contactNumber2", sosUserDetails.getContactNumber2());
query.setParameter("contactRelation2", sosUserDetails.getContactRelation2());
session.beginTransaction();
query.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);
output = (Map<String, Object>) query.uniqueResult();
session.getTransaction().commit();
result.put(Constants.RESULT, true);
result.put(Constants.OUTPUT, output);
} catch (Exception e) {
logger.error("::::::Exception in SOSDaoImpl updateSOSDetails : " + e.getMessage() + e );
Constants.sessionRollBack(session);
} finally {
Constants.closeSession(session);
}
return result;
}
Требуется ли Constants.sessionRollBack (session) в этом случае методов?