【发布时间】:2012-05-27 07:58:56
【问题描述】:
在我们的 java 项目中,我们使用带有 hibernate 和 spring 的 ORM。 我在删除持久对象时遇到了问题。例如,这个示例方法通过 id 获取实体,然后删除它们:
@Transactional
public void remove(List<Long> ids) {
SearchTemplate template = new SearchTemplate();
template.addParameter("milestoneId",ids);
List <InvoiceQueue> items = this.findByCriteria(template);
...
this.delete(items);
}
方法执行 Ok 没有任何异常,但实际上并没有从数据库中删除项目。
在方法定义@Transactional(propagation = Propagation.REQUIRES_NEW)添加如下注解即可解决问题。
谁能解释为什么它不适用于默认传播类型 PROPAGATION_REQUIRED。
提前致谢。
环境详情:
hibernate.version 3.5.5-Final,spring.version 3.0.5.RELEASE
【问题讨论】:
-
周边事务可能有问题。如果您使用 PROPAGATION_REQUIRED,则此方法使用当前事务。如果在运行此方法后当前事务期间出现异常,则可能会回滚更改。
标签: spring hibernate spring-transactions