簡體   English   中英

Spring Data CrudRepository和Transactions

[英]Spring Data CrudRepository and Transactions

我正在嘗試在CrudRepository接口上實現事務。 我是初學者,我目前的問題是,當收到來自不同客戶的大量請求時,我有時會得到重復。 為了避免這種情況,我想使用SQL Transactions及其在Spring中的實現,但我無法使其正常工作。

以下是我嘗試過的方法:

@Repository
@EnableTransactionManagement
@Transactional
public interface ApplicationPackageDao extends CrudRepository<ApplicationPackage, Long> {

/**
 * Find if a record exists for this package name ,
 * @param packageName
 * @return
 */
@Transactional
ApplicationPackage findByPackageName(String packageName);

}

但它似乎不起作用。 我試圖在我正在調用的Java方法中添加@Transactionnal注釋,但我也無法使其工作。

我如何處理CrudRepository上的事務? 或者我完全使用了錯誤的東西?

除了crm86之外,還回答了@Transactional注釋的一些注釋:

  • 似乎最好的做法是在應用程序中注入入口點(例如,您的Web控制器方法或計划批處理的主要方法)。 通過使用注釋屬性TxType,您可以確保位於應用程序更深處的方法中的約束/條件(例如,如果沒有運行trx-context,則拋出TxType.MANDATORY等)。

  • 如果將類作為spring bean加載(例如,類級別為@Component注釋),則@Transactional注釋僅具有效果。

  • 請記住,只有RuntimeException導致回滾。 如果要檢查導致回滾的已檢查異常,則必須使用屬性rollbackOn枚舉每個此類異常。

  • 類級別的注釋對此類的所有公共方法都有效。 方法級別注釋會覆蓋類級別的注釋。 上例中的重復注釋(首先在類級別,然后在方法級別)沒有任何效果。

我的建議是什么:

使用@Configuration批注檢查上下文和配置類。 文檔

如果使用基於Java的配置,則@EnableTransactionManagement批注提供等效支持。 只需將注釋添加到@Configuration類即可

@EnableTransactionManagement只在bean中查找它們所定義的相同應用程序上下文中的@Transactional

然后,即使在方法中,您也可以在服務中使用@Transactional

希望能幫助到你

暫無
暫無

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

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