繁体   English   中英

春季交易或休眠交易

[英]Spring Transaction or Hibernate Transaction

我知道我发布了一个多余的问题。 我也浏览过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都启用了事务。 这是这样做的好习惯吗? 还是这两个部分中的交易就足够了?

  2. 在这种批量交易期间,建议使用session.openSession()或session.getCurrentSession()? 在批量提交期间每次打开和关闭交易是否是一种好习惯?

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

尽管事务管理的用法因应用程序而异,但根据我的经验,我可以指出一些重要的事情。

  1. 尽管spring和hibernate都提供事务API,但是我将始终使用Spring声明式事务管理,因为它可以处理所有事务,并且我无需担心回滚和提交。
  2. 最好使用session.getCurrentSession(),它将返回当前线程的会话。
  3. 如果您使用的是Spring事务管理,则回滚将在Spring托管事务下进行。

您不需要同时使用Hibernate和Spring事务。

以上几点基于我的经验,可能会因应用程序要求而异。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM