Java 如何回滚除异常以外的所有内容以存储在表中
我之前问过相关问题,但没有得到答案,可能是我问的方式不对。我的问题是,在我的java程序中,我想回滚除异常之外的所有内容,因为当我回滚时,我希望用户通过将异常存储在表中来知道异常是由什么引起的。现在我正在使用会话回滚,即回滚所有内容,甚至是存储在表中的异常,如何避免这种棘手的情况Java 如何回滚除异常以外的所有内容以存储在表中,java,arrays,oracle,oop,java-8,Java,Arrays,Oracle,Oop,Java 8,我之前问过相关问题,但没有得到答案,可能是我问的方式不对。我的问题是,在我的java程序中,我想回滚除异常之外的所有内容,因为当我回滚时,我希望用户通过将异常存储在表中来知道异常是由什么引起的。现在我正在使用会话回滚,即回滚所有内容,甚至是存储在表中的异常,如何避免这种棘手的情况 try { initialSession.saveChanges(); response = BusinessObjectDispatcher.execute(request,BusinessObjectActionL
try {
initialSession.saveChanges();
response = BusinessObjectDispatcher.execute(request,BusinessObjectActionLookup.constants.ADD);
rootElement = response.getRootElement();
addError(CmMessageRepository.faCantbeCreated());
initialSession.commit();
}
catch (Throwable e) {
initialSession.rollback();
}
return null;
使用存储过程报告带有自治_事务pragma的异常。这允许该过程在自己的事务中运行,并在主回滚之外提交。如果您在oracle文档中搜索Autonomy_事务,您应该会找到大量的示例。就在这种情况下,我大量使用了它。使用存储过程报告带有自治事务pragma的异常。这允许该过程在自己的事务中运行,并在主回滚之外提交。如果您在oracle文档中搜索Autonomy_事务,您应该会找到大量的示例。就在这种情况下,我大量使用了它。正如您在评论中所说,您正在使用hibernate。
我假设您在服务或dao级别使用“@Transactional” 您还可以使用@Transactional(propagation=propagation.REQUIRES\u new)创建新的方法/类这将不会在异常情况下回滚
public class AuditDao {
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void log(Exception e){
// ... save exception details as per requiremnet..
// you can create some expection model and use it to insert or plain insert query
}
}
在catch块中调用此方法
try {
initialSession.saveChanges();
....
} catch (Throwable e) {
initialSession.rollback();
auditDao.log(e);
}
return null;
您可以避免initialSession.commit();和initialSession.rollback();正如您在评论中所说,hibernate@transaction注释将处理此问题。您正在使用hibernate。
我假设您在服务或dao级别使用“@Transactional” 您还可以使用@Transactional(propagation=propagation.REQUIRES\u new)创建新的方法/类这将不会在异常情况下回滚
public class AuditDao {
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void log(Exception e){
// ... save exception details as per requiremnet..
// you can create some expection model and use it to insert or plain insert query
}
}
在catch块中调用此方法
try {
initialSession.saveChanges();
....
} catch (Throwable e) {
initialSession.rollback();
auditDao.log(e);
}
return null;
您可以避免initialSession.commit();和initialSession.rollback();因为hibernate@transaction注释将负责此回滚。。?会话回滚?你的问题缺乏足够的信息,你能补充一些例子吗?我在理解您的问题时遇到问题…我使用的是hibernate会话回滚,它正在回滚所有内容,我需要将异常存储在表中,但由于回滚,即使存储的异常也会被回滚。请不要使用注释来澄清您的问题;更新Q的正文,以澄清问题的描述。祝你好运。一种方法是在pl/sql中使用“pragma autonomous transaction”(pragma autonomous transaction))定义存储过程,将异常数据插入到某个表中。如何让它与您的特定框架一起工作-我不知道:)回滚。。?会话回滚?你的问题缺乏足够的信息,你能补充一些例子吗?我在理解您的问题时遇到问题…我使用的是hibernate会话回滚,它正在回滚所有内容,我需要将异常存储在表中,但由于回滚,即使存储的异常也会被回滚。请不要使用注释来澄清您的问题;更新Q的正文,以澄清问题的描述。祝你好运。一种方法是在pl/sql中使用“pragma autonomous transaction”(pragma autonomous transaction))定义存储过程,将异常数据插入到某个表中。如何让它与您的特定框架一起工作-我不知道:)