gpt4 book ai didi

java - Spring JPA Repository保存不插入数据库

转载 作者:行者123 更新时间:2023-12-04 16:07:56 28 4
gpt4 key购买 nike

我正在启动一个包含 @Service 类的 spring-boot 应用程序:

@Service
@Transactional (value = MatrixModelConfiguration.TRANSACTION_MANAGER_MATRIX)
public class MatrixTubeService implements IMatrixTubeService {

@Autowired
MatrixTubeRepository repository;

@Override
public void flush() {
boolean txn = TransactionSynchronizationManager.isActualTransactionActive();
System.out.println("flush txn exist " + txn);
repository.flush();
}

@Override
public MatrixTube save(MatrixTube matrixTube) {
boolean txn = TransactionSynchronizationManager.isActualTransactionActive();
String txnName = TransactionSynchronizationManager.getCurrentTransactionName();
System.out.println("save txn exist " + txn + " as " + txnName);
return repository.save(matrixTube);
}
.
.
.

包装对这个简单的 @EnableJpaRepositories 类的调用:

@EnableJpaRepositories(entityManagerFactoryRef = MatrixModelConfiguration.ENTITY_MANAGER_FACTORY_MATRIX, 
transactionManagerRef = MatrixModelConfiguration.TRANSACTION_MANAGER_MATRIX)
public interface MatrixTubeRepository extends JpaRepository<MatrixTube, Long> {

}

此代码位于依赖的 jar 中,并且在三个父项目中的两个中运行完美。在没有的情况下,INSERTs/UPDATEs 不适用于数据库。事实上,它们甚至不显示在调试输出中。

  • 我在保存中添加了交易管理器检查并验证了交易活跃且可用。
  • 我在运行时没有看到任何异常
  • 所有其他 JpaRepository 实现都按预期工作

我在新创建的对象的 service.save() 之后直接添加了对 service.flush() 的调用,并且在对先前读取的对象进行了几次更新之后再次调用(在同一个 txn 中)并且在这两种情况下,我看到 txn 在 flush 方法中处于 Activity 状态,但是当 repository.flush() 被调用时,我得到一个“没有交易正在进行”的异常.

我错过了什么?

最佳答案

可能spring-test设置回滚默认值为true,

添加 @Rollback(false) 解决了我的问题。

关于java - Spring JPA Repository保存不插入数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48015329/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com