Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring嵌套@Transactional方法在父@Transactional方法执行之前将记录存储到db_Java_Spring_Hibernate_Transactional - Fatal编程技术网

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

Java Spring嵌套@Transactional方法在父@Transactional方法执行之前将记录存储到db,java,spring,hibernate,transactional,Java,Spring,Hibernate,Transactional,我有春天4号和冬眠4号。我的问题是,我想对导入的数据进行事务处理。我解析JSON,然后将其存储到DB。但当出现问题时(服务器将停机)。我不希望数据库中有部分数据 我有一个方法: @Transactional private void processJson() 在其中,我在循环中调用: recipientGroupSellInService.saveOrUpdate(perDay); 看起来很像这样: @Transactional private void processJson(){

我有春天4号和冬眠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
上,我应该注意什么或改变什么以获得“真正的事务”?

事务是在
processJson()
中启动的。由于您的
saveOrUpdate()
正在使用常规的
@Transactional
,因此它将加入以前启动的事务

如果出现问题(即
RuntimeException
),则由
processJson()
生成的任何内容都将回滚


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

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

例如:



getSession()返回什么?getSession:
protected Session getSession(){return sessionFactory.getCurrentSession();}
确保没有复制组件(在
ContextLoaderListener
DispatcherServlet
中扫描组件可能会导致重复的组件—由于该上下文中没有
,因此无法进行转换。我非常确定我没有重复的组件,它的所有注释都是由
驱动的是的,我开始进行导入,大约需要几分钟,一次启动后,我可以在DB(SQL SERVER)中看到数据,在我终止进程后,所有数据都保留在DBI中。我有
@Autowired@Bean(name=“transactionManager”)公共HibernateTransactionManager getTransactionManager(SessionFactory SessionFactory){HibernateTransactionManager transactionManager=新的HibernateTransactionManager(sessionFactory);return transactionManager;}
@EnableTransactionManagement公共类AppConfig中实现SchedulingConfigurer{
启动应用程序后,我得到如下日志:12:14:08263信息TransactionFactoryInitiator:62-hh000399:使用默认事务策略(直接JDBC事务)
<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource"/>
</bean>