我使用spring数据JPA在Oracle数据库中插入/更新一些数据。如果我没有明确指定dataSource
和/或platformTransactionManager
,一切都很有效,我可以插入/更新数据。如果我将DataSourceTransactionManager
指定为platformTransactionManager
,则不会抛出任何异常,但数据未插入数据库中。
这似乎是一个提交问题。使用这个数据源似乎需要一个没有发生的显式提交,因此,数据永远不会被持久化。我已经尝试指定spring.datasource.tomcat.defaultAutoCommit: true
,但它没有帮助。
关于如何完成每笔交易的任何想法。我的插入/更新代码如下所示
@Transactional
@Override
public OrderEntity save(OrderResponse order) {
OrderEntity o = orderRepository.unwrap(order);
return orderRepository.save(o);
}
事务管理器bean:
@Primary
@Bean
public PlatformTransactionManager txManager(DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
-
以下是演示此问题的示例项目。我在这里使用h2,只需添加transactionManager
,数据就不再存在了
答案 0 :(得分:1)
使用jpaTransactionManager
解决了该问题,因为我认为在这种情况下,dataSourceTransactionManager
与JPA使用的entityManager
无关