关于Spring事务管理器

关于Spring事务管理器,spring,transactions,Spring,Transactions,目前,我正在应用程序中使用spring声明性事务管理器。在数据库操作过程中,如果违反了任何约束,我想根据数据库检查错误代码。我的意思是,我想在异常发生后运行一个select查询。因此,我在Catch块中捕获DataIntegrityViolationException,然后尝试执行另一个错误代码查询。但该查询没有得到执行。我假设,因为我正在使用事务管理器,所以如果发生任何异常,则不会执行下一个查询。是这样吗?。我想在将结果返回给客户机之前执行该错误代码查询。有办法吗 @Override @Tra

目前,我正在应用程序中使用spring声明性事务管理器。在数据库操作过程中,如果违反了任何约束,我想根据数据库检查错误代码。我的意思是,我想在异常发生后运行一个select查询。因此,我在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());
        }


    }

请帮帮我。

我认为您描述的问题与事务管理无关。如果在try块中发生DataIntegrityViolationException,则应执行catch中的代码。可能发生了与DataIntegrityViolationException不同的异常,或者findErrorCodeByErrorMessage引发了另一个异常。一般来说,只有在方法调用返回后才应用事务逻辑,在此之前,您可以使用普通Java语言构造执行任何操作。我建议您将断点放在错误处理程序或一些调试语句中,以查看实际发生的情况。

谢谢您的回复。若我使用@transaction注释,那个么在异常出现后它甚至并没有命中catch块。它直接从数据库中给出错误字符串。它不允许我捕获错误。如果我不使用事务注释,一切正常。我确信我的findErrorCodeByErrorMessage方法没有问题。无论如何,我发布了我的findErrorCodeByErrorMessage方法代码。请帮助我。