簡體   English   中英

Spring JPA Repository保存未插入數據庫

[英]Spring JPA Repository save not Inserting into the database

我正在啟動一個包含@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 中,並且在三個父項目中的兩個中完美運行。 如果不是,則 INSERT/UPDATE 不適用於數據庫。 事實上,它們甚至沒有顯示在調試輸出中。

  • 我在保存中添加了 txn 管理器檢查並驗證了 txn 處於活動狀態且可用。
  • 我在運行時沒有看到任何Exception
  • 所有其他JpaRepository實現都按預期工作

我在新創建的對象的service.save()之后直接添加了對service.flush()的調用,並在幾次更新之前讀取的對象(在同一個 txn 內)之后再次添加了對service.flush()的調用,在這兩種情況下,我都看到 txn 處於活動狀態在flush方法中,但是當repository.flush()被調用時,我得到一個“沒有正在進行的事務”異常。

我錯過了什么?

也許 spring-test 設置回滾默認值是 true,

添加@Rollback(false)解決了我的問題。

使用 springdatajpa,您不需要所有這些魔法。 txn 等

在您的主應用程序類中使用此注釋。

@EnableJpaRepositories(entityManagerFactoryRef = MatrixModelConfiguration.ENTITY_MANAGER_FACTORY_MATRIX, 
                                   transactionManagerRef = MatrixModelConfiguration.TRANSACTION_MANAGER_MATRIX)

從本教程開始。 與標准 Hibernate/jpa 相比,Spring 數據 jpa 有點神奇。

https://spring.io/guides/gs/accessing-data-jpa/

問題與從事務內部產生一個新線程有關,該線程實際上在事務提交后(在計算機時間)執行 SQL 插入。

不知道為什么沒有拋出異常,但是將插入返回事務線程修復了所有問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM