在我们的java项目中,我们使用了带有hibernate和spring的ORM。 我在删除持久对象时遇到了问题。例如,这样的方法通过IDS得到实体,然后将其删除:Spring transaction propagation_required issue
@Transactional
public void remove(List<Long> ids) {
SearchTemplate template = new SearchTemplate();
template.addParameter("milestoneId",ids);
List <InvoiceQueue> items = this.findByCriteria(template);
...
this.delete(items);
}
方法执行好,没有任何异常,但实际上并没有删除数据库中的项目。
将以下注释添加到方法定义@Transactional(propagation = Propagation.REQUIRES_NEW)
可解决问题。
任何人都可以解释为什么它不适用于默认传播类型PROPAGATION_REQUIRED。
在此先感谢。
环境的详细信息:
hibernate.version 3.5.5决赛,spring.version 3.0.5.RELEASE
周围的交易可能有问题。如果您使用PROPAGATION_REQUIRED,则此方法使用当前事务。如果在运行此方法后当前事务中存在异常,则可能会回滚这些更改。 –