Java 当出现异常时,回滚完成操作,但将异常存储在表中

Java 当出现异常时,回滚完成操作,但将异常存储在表中,java,model-view-controller,java-8,Java,Model View Controller,Java 8,我使用try-catch已经很久了,但try-catch的问题是,如果try中发生任何异常,它将转到catch,我使用catch方法将异常保存在表的中,问题是,它不会因为try而回滚整个过程,所以如何回滚并将异常存储在表中 Element rootElement = request.addElement("Cm-CreateFA"); rootElement.addElement("fieldActivityType").addText(faType_id.getIdValue().trim()

我使用try-catch已经很久了,但try-catch的问题是,如果try中发生任何异常,它将转到catch,我使用catch方法将异常保存在表的中,问题是,它不会因为try而回滚整个过程,所以如何回滚并将异常存储在表中

Element rootElement = request.addElement("Cm-CreateFA");
rootElement.addElement("fieldActivityType").addText(faType_id.getIdValue().trim());
rootElement.addElement("createdBy").addText("SE");
rootElement.addElement("isEligibleForDispatch").addText("true");
rootElement.addElement("fieldActivityStatus").addText("P");
rootElement.addElement("dispatchGroup").addText(dispatch_Group_Cd.trim());
rootElement.addElement("user").addText(getActiveContextUser().getId().getIdValue().trim());
rootElement.addElement("scheduleDateTimeStart").addText(scheduleDate);
rootElement.addElement("creationDateTime").addText(getSystemDateTime().toString());
rootElement.addElement("servicePointId").addText(disco_ServicePoint_Id.getIdValue().trim());



try{

response = BusinessObjectDispatcher.execute(request,BusinessObjectActionLookup.constants.ADD);
rootElement = response.getRootElement();


} 


catch (Exception e) {
try{
    addError(CmMessageRepository.faCantbeCreated());
}
catch(Error execp){
System.out.println("<<=======in exception=========>>"); 

}
finally{
 String errorMessage=e.initCause(e.getCause()).toString();
 genericBComponet.addSyncInboundBoLog(in_Sync_Id, errorMessage, chartype11);
 genericBComponet.updateSyncinCharValues(new SyncRequestInbound_Id(in_Sync_Id),charType8,"Y");
}
}
Element-rootElement=request.addElement(“Cm-CreateFA”);
rootElement.addElement(“fieldActivityType”).addText(faType_id.getIdValue().trim());
rootElement.addElement(“createdBy”).addText(“SE”);
rootElement.addElement(“isEligibleForDispatch”).addText(“true”);
rootElement.addElement(“fieldActivityStatus”).addText(“P”);
addElement(“dispatchGroup”).addText(dispatch_Group_Cd.trim());
rootElement.addElement(“用户”).addText(getActiveContextUser().getId().getIdValue().trim());
rootElement.addElement(“scheduleDateTimeStart”).addText(scheduleDate);
rootElement.addElement(“creationDateTime”).addText(getSystemDateTime().toString());
rootElement.addElement(“servicePointId”).addText(disco_ServicePoint_Id.getIdValue().trim());
试一试{
response=BusinessObjectDispatcher.execute(请求,BusinessObjectActionLookup.constants.ADD);
rootElement=response.getRootElement();
} 
捕获(例外e){
试一试{
addError(CmMessageRepository.faCantbeCreated());
}
捕获(错误执行){
System.out.println(“”);
}
最后{
字符串errorMessage=e.initCause(e.getCause()).toString();
genericBComponet.addSyncInboundBoLog(在同步Id中,错误消息,图表类型11);
genericBComponet.updateSyncinCharValues(新的SyncRequestInbound_Id(in_Sync_Id),图表类型8,“Y”);
}
}

如果您的try-catch应该负责事务边界,那么您可能希望这样编码:

try (Connection conn = /*get connection*/) {
    try {
        conn.setAutoCommit(false);
        // do work here
        conn.commit();
    } catch (Throwable e) {
        conn.rollback();
        saveException(conn, e);
        throw e;
    }
}

其中
saveException
方法立即提交(或自动提交)。

您希望回滚哪种进程?首先,为什么要将异常放在某个表中并忽略?我正在创建某个活动,因此如果在创建活动时发生任何异常,我也要回滚,我要将确切的异常存储在某个表中,我想用try-catch我可以做到这一点,但是try-catch不会回滚进程,因为错误处理会更好地理解代码,请添加适当的MCVE供人们帮助。添加,请检查是否可以使用hibernate session.rollback代替connection.rollback?@RajeshAcharya问题没有说hibernate或其他什么,所以我只是默认使用普通JDBC。所以,如果你使用Hibernate,你应该使用Hibernate会话。