В настоящее время я использую весенний декларативный менеджер транзакций в моем приложении.Если во время операций с БД нарушено какое-либо ограничение, я хочу проверить код ошибки в базе данных.Я имею в виду, я хочу выполнить один запрос select после того, как произошло исключение.Поэтому я ловлю исключение DataIntegrityViolationException внутри моего блока Catch, а затем пытаюсь выполнить еще один запрос кода ошибки.Но этот запрос не выполняется.Я предполагаю, что поскольку я использую диспетчер транзакций, если произошло какое-либо исключение, следующий запрос не выполняется.Это правильно?.я хочу выполнить этот запрос кода ошибки, прежде чем вернуть результаты клиенту.Есть ли способ сделать это?
@Override
@Transactional
public LineOfBusinessResponse create(
CreateLineOfBusiness createLineOfBusiness)
throws GenericUpcException {
logger.info("Start of createLineOfBusinessEntity()");
LineOfBusinessEntity lineOfBusinessEntity =
setLineOfBusinessEntityProperties(createLineOfBusiness);
try {
lineOfBusinessDao.create(lineOfBusinessEntity);
return setUpcLineOfBusinessResponseProperties(lineOfBusinessEntity);
}
// Some db constraints is failed
catch (DataIntegrityViolationException dav) {
String errorMessage =
errorCodesBd.findErrorCodeByErrorMessage(dav.getMessage());
throw new GenericUpcException(errorMessage);
}
// General Exceptions handling
catch (Exception exc) {
logger.debug("<<<<Coming inside General >>>>");
System.out.print("<<<<Coming inside General >>>>");
throw new GenericUpcException(exc.getMessage());
}
}
public String findErrorCodeByErrorMessage(String errorMessage)throws GenericUpcException {
try{
int first=errorMessage.indexOf("[",errorMessage.indexOf("constraint"));
int last=errorMessage.indexOf("]",first);
String errorCode=errorMessage.substring(first+1, last);
//return errorCodesDao.find(errorCode);
return errorCode;
}
catch(Exception e)
{
throw new GenericUpcException(e.getMessage());
}
}
Пожалуйста, помогите мне.