目前我在我的应用程序中使用spring声明式事务管理器。在数据库操作期间,如果违反任何约束,我想检查数据库的错误代码。我的意思是我想在异常发生后运行一个选择查询。所以我在我的Catch块中捕获DataIntegrityViolationException,然后我尝试再执行一次错误代码查询。但该查询未执行。我假设因为我正在使用事务管理器,如果发生任何异常,则下一个查询未执行。是对的吗?。我想在将结果返回给客户端之前执行该错误代码查询。有什么办法吗?
@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());
}
}
请帮帮我。
答案 0 :(得分:0)
我认为您所描述的问题与交易管理无关。如果您DataIntegrityViolationException
块中发生try()
,则catch()
内的代码应执行。也许与[{1}}发生异常或您的DataIntegrityViolationException
抛出另一个异常。通常,只有从方法调用返回后才会应用事务逻辑,直到那时你可以使用普通的Java语言结构做任何你喜欢的事情。我建议你在你的错误错误处理程序或一些调试语句中放置断点,看看实际发生了什么。