关于Spring事务管理器
目前,我正在应用程序中使用spring声明性事务管理器。在数据库操作过程中,如果违反了任何约束,我想根据数据库检查错误代码。我的意思是,我想在异常发生后运行一个select查询。因此,我在Catch块中捕获DataIntegrityViolationException,然后尝试执行另一个错误代码查询。但该查询没有得到执行。我假设,因为我正在使用事务管理器,所以如果发生任何异常,则不会执行下一个查询。是这样吗?。我想在将结果返回给客户机之前执行该错误代码查询。有办法吗关于Spring事务管理器,spring,transactions,Spring,Transactions,目前,我正在应用程序中使用spring声明性事务管理器。在数据库操作过程中,如果违反了任何约束,我想根据数据库检查错误代码。我的意思是,我想在异常发生后运行一个select查询。因此,我在Catch块中捕获DataIntegrityViolationException,然后尝试执行另一个错误代码查询。但该查询没有得到执行。我假设,因为我正在使用事务管理器,所以如果发生任何异常,则不会执行下一个查询。是这样吗?。我想在将结果返回给客户机之前执行该错误代码查询。有办法吗 @Override @Tra
@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());
}
}
请帮帮我。我认为您描述的问题与事务管理无关。如果在try块中发生DataIntegrityViolationException,则应执行catch中的代码。可能发生了与DataIntegrityViolationException不同的异常,或者findErrorCodeByErrorMessage引发了另一个异常。一般来说,只有在方法调用返回后才应用事务逻辑,在此之前,您可以使用普通Java语言构造执行任何操作。我建议您将断点放在错误处理程序或一些调试语句中,以查看实际发生的情况。谢谢您的回复。若我使用@transaction注释,那个么在异常出现后它甚至并没有命中catch块。它直接从数据库中给出错误字符串。它不允许我捕获错误。如果我不使用事务注释,一切正常。我确信我的findErrorCodeByErrorMessage方法没有问题。无论如何,我发布了我的findErrorCodeByErrorMessage方法代码。请帮助我。