Spring事务或Hibernate事务

时间:2015-01-27 20:09:26

标签: spring hibernate spring-mvc transactions spring-transactions

我知道我发布了一个多余的问题。我在SO和其他博客中也经历了各种各样的帖子,但我要求更多关于更多项目的清晰度。所以在这里张贴。

我使用Spring + Hibernate。我正在插入一些'n'记录。

MySpringController.java

@Transactional
@RequestMapping(...)
public String saveRecords(@ModelAttribute("orderObj") Order order){
  for(Item item : order.getItems()){
    itemDAO.save(item);
  }
  return "saveSuccess";
}

MyHibernateDAO类

public void save(Item item){
  session = sf.openSession();
  Transaction tx = session.beginTransaction();
  session.persist(item);
  tx.commit();
  session.close();
}

问题:

  
      
  1. Spring和Hibernate都启用了Transaction。这是一个好习惯吗?或者任一组件中的事务是   足够?

  2.   
  3. 在这样的批量事务中,建议使用session.openSession()或session.getCurrentSession()吗?好吗   练习打开&批量提交期间每次关闭交易?

  4.   
  5. 现在如果发生回滚,它将在哪个范围内?在Hibernate或Spring的交易下?

  6.   

1 个答案:

答案 0 :(得分:3)

虽然交易管理的使用因应用程序而异,但我可以根据我的经验指出一些重要的事情。

  1. 虽然spring和hibernate都提供了事务API,但我总是会选择Spring Declarative Transaction Management,因为它处理所有事情,我不需要担心回滚和提交。
  2. 最好使用session.getCurrentSession(),它将返回当前线程的会话。
  3. 如果您使用的是Spring事务管理,则回滚将在spring managed transaction下进行。
  4. 您不需要同时使用Hibernate和Spring事务。

    以上几点基于我的经验,可能会因申请要求而异。