无法使用Spring数据jpa存储库和JtaTransactionManager将对象持久化到数据库中。
无法使用Spring数据jpa存储库和JtaTransactionManager将对象持久化到数据库中。
尝试找出我代码中出错的地方,这段代码在我切换到JTAtransactionManager之前正常工作,但现在在保存记录到数据库时出现问题,但是获取记录的操作还是正常的。下面是我的示例TransactionConfig类和service类的方法。
@Configuration @ComponentScan @EnableTransactionManagement public class TransactionConfig { @Bean(name = "userTransaction") public UserTransaction userTransaction() throws Throwable { UserTransactionImp userTransactionImp = new UserTransactionImp(); //userTransactionImp.setTransactionTimeout(10000); return userTransactionImp; } @Bean(name = "atomikosTransactionManager", initMethod = "init", destroyMethod = "close") public TransactionManager atomikosTransactionManager() throws Throwable { UserTransactionManager userTransactionManager = new UserTransactionManager(); userTransactionManager.setForceShutdown(false); return userTransactionManager; } @Bean(name = "transactionManager") @DependsOn({ "userTransaction", "atomikosTransactionManager" }) public PlatformTransactionManager transactionManager() throws Throwable { UserTransaction userTransaction = userTransaction(); TransactionManager atomikosTransactionManager = atomikosTransactionManager(); return new JtaTransactionManager(userTransaction, atomikosTransactionManager); } } ---Employee Service类的方法--- @Transactional public void appExample() { try { Employee emp = new Employee(); emp.setFirstName("Veer"); emp.setLastName("kumar"); empRepo.save(emp); } catch (Exception e) { log.error(e); } }
无法使用Spring data jpa Repositories和JtaTransactionManager将对象持久化到数据库的问题可能是由于在`empRepo.save()`方法调用时没有提交任何更改到数据库,因为您正在使用事务管理。请尝试使用`empRepo.saveAndFlush()`,它会立即将数据刷新到数据库。您可以参考这个答案Difference between save and saveAndFlush in Spring data jpa。
感谢回复,我尝试了使用saveAndFlush但仍然没有成功。您可以尝试从addExample方法中删除Transactional注解,我认为这可能是导致问题的原因。