2014-06-23 31 views
0

我正在写一个石英作业,每天运行并更新一个特定的数据库表。春季声明性交易帮助需要

对于相同的逻辑如下:

1)获取的所有实体[如我们使用休眠],其需要和更新 2)迭代它们,获得每个对象,并调用一个独立的私人方法来执行更新。

以上两个步骤在代表石英工作的公共方法中执行。

我想确保即使任何记录的更新失败,也不应该影响其他记录。例如,如果找到50条记录,并在更新第31条记录时发生错误,则它不应该回滚先前的30条更新。

有人可以建议在这里使用哪种交易方法吗?应该是PROPAGATION_NOT_SUPPORTED还是PROPAGATION_REQUIRES_NEW或其他?

问候

回答

0

使用声明式事务管理与私有方法很难...看到http://docs.spring.io/spring/docs/3.2.x/spring-framework-reference/htmlsingle/#tx-decl-explained了解详情。

为您的使用情况下,我看到两个选项:

  1. 使用编程式事务管理,所以如果有人读取的代码,这显然就是事务边界是
  2. 提取数据访问对象持久化逻辑使用公共更新方法(更新一个实体)。你可以在这个道路上使用声明式的方法。

后面的方法可以帮助您分离关注点,无需关心石英工作中的事务和数据库相关代码。