Java 当出现异常时,回滚完成操作,但将异常存储在表中
我使用try-catch已经很久了,但try-catch的问题是,如果try中发生任何异常,它将转到catch,我使用catch方法将异常保存在表的中,问题是,它不会因为try而回滚整个过程,所以如何回滚并将异常存储在表中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()
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会话。