当前位置: 首页 > 知识库问答 >
问题:

正常的Spring+Hibernate事务行为?

楚权
2023-03-14

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

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

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

当前,第一个似乎可以插入新记录。第一个方法
不应该回滚吗?

更新您可以参考我前面的问题,但我认为这可能太长了。
Spring 3.x和Hibernate 4中的事务管理


为了总结这个问题(尽我所能),
我有一个服务类方法,它从一个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);
}

共有1个答案

华森
2023-03-14

如果两种方法都是事务性的,那么第二种方法的失败自然不会影响第一种方法。如果您认为这两个方法都是单个(正确的)事务的一部分,那么您要么错了,要么错在它似乎是部分提交的事实上。你需要提供更多的信息来得到一个很好的答案,为什么其中一个是真的。

 类似资料:
  • 问题内容: 我刚刚开始使用spring和hibernate进行项目。我的DAO图层类扩展了HibernateDaoSupport。我们没有使用注释。之前,我们使用了struts,因此我们使用了Session类提供的getTransaction,commit,rollback ..方法。我的要求非常简单,对于所有DAO类,如果有异常,则回滚,否则提交。请提出介绍spring交易管理的最简单方法。 问

  • 我正在尝试使用Hibernate保存数据。一切都发生在同一会话中。逻辑如下: 1)开始交易并尝试保存: 2) 如果新记录违反完整性约束,请在外包装方法中捕获异常,打开另一个事务并查询更多数据 问题是当第二个事务执行时query.list它会抛出一个应该与前一个事务链接的异常。 SQLIntegrityConstraintViolationException:ORA-00001:唯一约束 我应该从另

  • spring和mybatis是否可以中断正在执行的mybatis数据库事务? 例子: 我有一个将数千条记录插入oracle SQL数据库的应用程序。这大约需要5分钟。如果用户在插入记录时按下“停止”按钮,我希望停止数据库事务并回滚更改。 一旦数据库过程完成,我可以使用事务管理器回滚事务: 但我无法在事务运行时中断它。 在JDBC中,我会简单地做: 我试图在MyBatis中获得这份准备好的声明,但我

  • 问题内容: 我为我的REST API使用了Open-Session-In-View事务模型,如下所示: 这项工作很好。我想添加@Async功能。所以我创建了: 和: productManager调用另一个@Service 但是,因为 我得到一个例外: 在添加对它进行异步调用的功能之前,它工作得很好,因此我认为这会杀死我在Hibernate中打开的事务。 我尝试根据此处的另一个答案将方法添加到带有注

  • 这里的期望是它不应该在PERSON表中插入任何记录,因为它会在插入第三个PERSON对象时抛出异常。但是它没有回滚,前2条记录被插入并提交。 然后我想到了快速尝试使用JPA EntityManager。 然后我得到javax.persistence.TransactionRequiredException:没有可用的事务性EntityManager异常。 然后em.save(person)按预期工

  • 我的项目使用的是Spring MVC4、Hibernate5。我已经用通知拦截器配置了hibernate事务,但它没有像我希望的那样回滚。请帮帮我,我的配置有什么问题? @aspect@配置公共类TxAdviceInterceptor{ } 道: } 正如上面的代码,我想如果postdao.save是error,tagDao也是rollback。