Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.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 Hibernate@Transactionl错误_Java_Spring_Hibernate_Jpa - Fatal编程技术网

Java Hibernate@Transactionl错误

Java Hibernate@Transactionl错误,java,spring,hibernate,jpa,Java,Spring,Hibernate,Jpa,Hi使用Spring/JPA Hibernate面对一个wiered问题 在服务类methodA()和methodB() 如上所述,我在循环中从MethodA调用methodB。如果来自循环的任何操作失败,或者循环外的数据库操作失败,我希望trasnastion回滚为methodA()本身就是transactiona 但我面临着一个无线问题,我看到数据在methodB()完成后立即提交到数据库,并且即使在从methodA()引发异常后也不会回滚 我还尝试从methodB()中删除transati

Hi使用Spring/JPA Hibernate面对一个wiered问题

在服务类
methodA()
methodB()

如上所述,我在循环中从MethodA调用methodB。如果来自循环的任何操作失败,或者循环外的数据库操作失败,我希望trasnastion回滚为
methodA()
本身就是transactiona

但我面临着一个无线问题,我看到数据在
methodB()
完成后立即提交到数据库,并且即使在从
methodA()引发异常后也不会回滚


我还尝试从
methodB()
中删除transational,也尝试了
propogation=NESTED/REQUIRED/MANDATORY
。但是似乎什么都不起作用。

这不是使用Spring时事务的工作方式。必须从外部调用事务方法,而不是从其他方法内部调用事务方法。原因是,在您的情况下,Spring将无法通过AOP代理应用事务,因为对methodB的调用直接来自
methodA
,而Spring将无法在调用
methodB
之前应用事务方面。有关更多信息,请参阅“了解AOP代理”一节,以及
在第10.5.1节中,这不是使用Spring时事务的工作方式。必须从外部而不是从其他方法内部调用事务方法。原因是,在您的情况下,Spring将无法通过AOP代理应用事务,因为对methodB的调用直接来自
methodA
,而Spring将无法在调用
methodB
之前应用事务方面。有关更多信息,请参阅“了解AOP代理”一节,以及
在第10.5.1节中,这不是使用Spring时事务的工作方式。必须从外部而不是从其他方法内部调用事务方法。原因是,在您的情况下,Spring将无法通过AOP代理应用事务,因为对methodB的调用直接来自
methodA
,而Spring将无法在调用
methodB
之前应用事务方面。有关更多信息,请参阅“了解AOP代理”一节,以及
在第10.5.1节中,这不是使用Spring时事务的工作方式。必须从外部而不是从其他方法内部调用事务方法。原因是,在您的情况下,Spring将无法通过AOP代理应用事务,因为对methodB的调用直接来自
methodA
,而Spring将无法在调用
methodB
之前应用事务方面。有关更多信息,请参阅“了解AOP代理”一节,以及
在第10.5.1节中,我认为您已经在DAO层中声明了@Transactional方法。在这里,执行该方法后,它将提交/回滚到DB。 在服务层中定义一个同时调用这两个方法的方法,并为该方法声明@Transactional注释,然后删除 @DAO层的事务性。然后,只有在执行该服务层方法之后,才会发生DB事务(提交/回滚)。因此,在任何方法中,DB回滚都会发生一些错误

服务层方法如下所示

 @Transactional
public methodTest(){
        methodA();
        methodB();
  }

我认为您已经在DAO层中声明了@Transactional方法。在这里,在执行该方法之后,它将提交/回滚到DB。 在服务层中定义一个同时调用这两个方法的方法,并为该方法声明@Transactional注释,然后删除 @DAO层的事务性。然后,只有在执行该服务层方法之后,才会发生DB事务(提交/回滚)。因此,在任何方法中,DB回滚都会发生一些错误

服务层方法如下所示

 @Transactional
public methodTest(){
        methodA();
        methodB();
  }

我认为您已经在DAO层中声明了@Transactional方法。在这里,在执行该方法之后,它将提交/回滚到DB。 在服务层中定义一个同时调用这两个方法的方法,并为该方法声明@Transactional注释,然后删除 @DAO层的事务性。然后,只有在执行该服务层方法之后,才会发生DB事务(提交/回滚)。因此,在任何方法中,DB回滚都会发生一些错误

服务层方法如下所示

 @Transactional
public methodTest(){
        methodA();
        methodB();
  }

我认为您已经在DAO层中声明了@Transactional方法。在这里,在执行该方法之后,它将提交/回滚到DB。 在服务层中定义一个同时调用这两个方法的方法,并为该方法声明@Transactional注释,然后删除 @DAO层的事务性。然后,只有在执行该服务层方法之后,才会发生DB事务(提交/回滚)。因此,在任何方法中,DB回滚都会发生一些错误

服务层方法如下所示

 @Transactional
public methodTest(){
        methodA();
        methodB();
  }