无法使用Spring数据jpa存储库和JtaTransactionManager将对象持久化到数据库中。

26 浏览
0 Comments

无法使用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);
    }
}

0
0 Comments

无法使用Spring data jpa Repositories和JtaTransactionManager将对象持久化到数据库的问题可能是由于在`empRepo.save()`方法调用时没有提交任何更改到数据库,因为您正在使用事务管理。请尝试使用`empRepo.saveAndFlush()`,它会立即将数据刷新到数据库。您可以参考这个答案Difference between save and saveAndFlush in Spring data jpa

感谢回复,我尝试了使用saveAndFlush但仍然没有成功。您可以尝试从addExample方法中删除Transactional注解,我认为这可能是导致问题的原因。

0