【问题标题】:Unable to persist object in database using Spring data jpa Repositories and JtaTransactionManager无法使用 Spring data jpa Repositories 和 JtaTransactionManager 在数据库中持久化对象
【发布时间】:2018-05-25 20:14:54
【问题描述】:

试图找出我的代码出了什么问题,在我转移到 JTAtransactionManager 之前它工作正常,但在数据库中保存记录但获取记录工作正常时遇到问题,下面是我的示例 TransactionConfig 类和服务类方法。

@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 Class Method---

@Transactional
public void appExample() {

    try {

        Employee emp = new Employee();

        emp.setFirstName("Veer");
        emp.setLastName("kumar");

        empRepo.save(emp);
    } catch (Exception e) {
        log.error(e);
    }

}

【问题讨论】:

  • empRepo的声明和定义在哪里?你能把它也包括进去吗?

标签: spring-data-jpa jta


【解决方案1】:

我认为问题在于empRepo.save() 方法调用。当您使用 @Transactional 进行事务管理时,此调用不会对数据库进行任何更改。

请尝试使用empRepo.saveAndFlush(),它将立即将数据刷新到数据库中。可以参考答案Difference between save and saveAndFlush in Spring data jpa

【讨论】:

  • 感谢您的回复,我尝试使用 saveAndFlush 但仍然没有成功。
  • @veeru 您可以尝试从 addExample 方法中删除 Transactional 注释吗?我认为这是造成问题的原因。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-19
  • 2018-05-01
  • 1970-01-01
相关资源
最近更新 更多