Hibernate-Spring @Transactional行为

时间:2015-08-11 12:52:37

标签: java spring hibernate transactions spring-transactions

我有一个@Transactional方法调用另一个@Transactional方法。子方法删除所有表,而父存储新行,所以我希望如果我在父方法中有异常,则数据库执行回滚(同一事务中的两个方法)。我在文档中读到,默认情况下这个标签是Propagration.REQUIRED,但我的行为是,即使我在父项中有异常,表也会被清除。

这是父母:

@Transactional(propagation=Propagation.REQUIRED)
public boolean cleanAndStoreCmsTableDao (List<MaintenanceMessage> list) throws Exception {
    for(MaintenanceMessage mm : list) {
        cmsTableDao.deleteMm(mm.getMm_id()); // The child is called
    }
    File file = new File(path);
    cmsTableDao.storePreviousCMSTable(file);
    return CmsTableCsvParser.parseCVSFile(path,cmsTableDao); // THIS METHOD PRODUCES AN EXCEPTION!!!
}

这是孩子(另一个班级)

@Override
@Transactional(propagation=Propagation.REQUIRED)
public boolean deleteMm(String mm_id) {
    deleteById(MaintenanceMessage.class, mm_id);
    return true;
}

PD:我在使用org.springframework.transaction.annotation.Transactional而不是JPA的版本。

0 个答案:

没有答案