Hibernate 普通弹簧&x2B;休眠事务行为?

Hibernate 普通弹簧&x2B;休眠事务行为?,hibernate,transactions,aop,spring-transactions,Hibernate,Transactions,Aop,Spring Transactions,我已经使用SpringAOP将Spring+Hibernate项目配置为事务性项目。 当我使用TransactionSynchronizationManager.isActualTransactionActive()签入DAO方法时,它显示为true。 我正在从我的服务类调用两个DAO方法,在第二个DAO方法中,我故意抛出一个错误并查看这两个方法是否回滚 目前,第一个似乎插入了一个新的记录刚刚好。第一种方法不应该回滚吗 更新 您可以参考我前面的问题,但我认为这可能太长了。 总结一下这个问

我已经使用SpringAOP将Spring+Hibernate项目配置为事务性项目。

当我使用
TransactionSynchronizationManager.isActualTransactionActive()
签入DAO方法时,它显示为true。

我正在从我的服务类调用两个DAO方法,在第二个DAO方法中,我故意抛出一个错误并查看这两个方法是否回滚

目前,第一个似乎插入了一个新的记录刚刚好。第一种方法不应该回滚吗

更新 您可以参考我前面的问题,但我认为这可能太长了。


总结一下这个问题(尽我所能),
我有一个服务类方法,它从一个DAO类调用两个方法。
正在从spring mvc控制器及其委托者调用该服务类。

我的aop:config如下所示

<aop:config proxy-target-class="true">
  <aop:pointcut id="transactionalServiceOperation" expression="execution(* kr.co.sgis.services.web.cooingbee.Crudable.*(..))"/>
  <aop:advisor advice-ref="txAdvice" pointcut-ref="transactionalServiceOperation"/>
</aop:config>


我的界面看起来像这样

public interface Crudable {

    public int delete(CooingbeeFetchable bean);
    public int save(CooingbeeFetchable bean);
    public int update(CooingbeeFetchable bean);
    public Set<CooingbeeFetchable> list(CooingbeeFetchable bean);
    public CooingbeeFetchable get(int id);
    public int count(CooingbeeFetchable bean);
    public int save2(CooingbeeFetchable bean);
}
公共接口可损坏{
public int delete(cooingbeeefetchable bean);
公共int save(cooingbeeefetchable bean);
公共int更新(cooingbeeefetchable bean);
公共集合列表(CooingbeeFetchable bean);
公共cooingbeeefetchable get(int-id);
公共整数计数(CooingbeeFetchable bean);
公共int save2(CooingbeeFetchable bean);
}

DAO和服务类都实现了可修改的接口。现在我想也许这就是问题所在 为什么它没有像我预期的那样工作?

希望我在不太冗长的情况下提供了足够的信息:)

如果两种方法都是事务性的,那么第二种方法的失败自然不会影响第一种方法。如果您认为这两种方法都是单个(正确)事务的一部分,那么您要么就错了,要么就错了,因为它似乎是部分提交的。你需要提供更多的信息才能很好地回答为什么一个或另一个是真的。

我终于明白了。
请阅读此内容。

文档中说,您需要抛出一个异常,让Spring知道出了什么问题 使用DAO方法,以便它可以回滚。以前,我的DAO方法没有抛出任何异常,而是通过在 尝试捕捉块。

另外,您需要像这样配置aop:config标记。

<aop:config proxy-target-class="true">
  <aop:pointcut id="transactionalServiceOperation" expression="execution(* kr.co.sgis.services.web.cooingbee.Crudable.*(..))"/>
  <aop:advisor advice-ref="txAdvice" pointcut-ref="transactionalServiceOperation"/>
</aop:config>

我希望这有帮助!:)
干杯