Spring嵌套的@Transactional方法在父@Transactional方法执行之前将记录存储到db

时间:2015-10-14 09:20:31

标签: java spring hibernate transactional

我有Spring 4 with Hibernate 4.我的问题是我想对导入的数据进行事务处理。我解析JSON,然后将其存储到DB。但是当出现问题时(服务器会崩溃)。我不想在数据库中包含部分数据。

我有方法:

@Transactional
private void processJson()

我在循环中调用:

recipientGroupSellInService.saveOrUpdate(perDay);

看起来很像这样:

@Transactional
private void processJson(){
    for(int i : iSet){
        recipientGroupSellInService.saveOrUpdate(perDay[i]);
    }
}

保存或更新:

@Transactional
public Boolean saveOrUpdate(T model) {
    getSession().saveOrUpdate(model);
    return true;
}

所以在调用saveOrUpdate之后,数据会存储到数据库中,而不会在方法processJson的一般失败时回滚。

我应该关注或更改方法processJson上的“真实交易”?

2 个答案:

答案 0 :(得分:0)

交易在processJson()开始。由于您的saveOrUpdate()正在使用常规@Transactional,因此它将加入之前启动的交易。

如果出现问题(即RuntimeException),则processJson()所做的任何内容都将被回滚。

您是否声称您正在看到写入部分数据的行为?

答案 1 :(得分:0)

您是否配置了PlatformTransactionManager? (来自xml或来自配置)

例如:

<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource"/>
</bean>