Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何回滚除异常以外的所有内容以存储在表中_Java_Arrays_Oracle_Oop_Java 8 - Fatal编程技术网

Java 如何回滚除异常以外的所有内容以存储在表中

Java 如何回滚除异常以外的所有内容以存储在表中,java,arrays,oracle,oop,java-8,Java,Arrays,Oracle,Oop,Java 8,我之前问过相关问题,但没有得到答案,可能是我问的方式不对。我的问题是,在我的java程序中,我想回滚除异常之外的所有内容,因为当我回滚时,我希望用户通过将异常存储在表中来知道异常是由什么引起的。现在我正在使用会话回滚,即回滚所有内容,甚至是存储在表中的异常,如何避免这种棘手的情况 try { initialSession.saveChanges(); response = BusinessObjectDispatcher.execute(request,BusinessObjectActionL

我之前问过相关问题,但没有得到答案,可能是我问的方式不对。我的问题是,在我的java程序中,我想回滚除异常之外的所有内容,因为当我回滚时,我希望用户通过将异常存储在表中来知道异常是由什么引起的。现在我正在使用会话回滚,即回滚所有内容,甚至是存储在表中的异常,如何避免这种棘手的情况

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))定义存储过程,将异常数据插入到某个表中。如何让它与您的特定框架一起工作-我不知道:)