簡體   English   中英

什么是Java EE中的事務?

[英]What is a transaction in java EE?

在我所見過的每一個資料中,事務都定義為一組成功或失敗在一起的操作。 但是,在JPA中使用EntityManager似乎需要進行事務處理,以持久保存我在內存中創建的單個實體。 交易是什么意思? 這個操作不是已經原子了嗎? 我如何回滾單個entity.persist() 在Java EE文檔的任何地方都對概念進行了明確的定義?

認為EntityManager.persist()是原子的,就像始終使用啟用了自動提交的SQL一樣。 事務用於創建原子操作,該原子操作允許您將一個或多個行作為單個原子操作插入到一個或多個表中,或者插入全部或不插入任何內容。

如果您沒有事務,並且插入一個用戶和他的兩個電話號碼(兩個表),而在插入第二個電話號碼時出了點問題,則您希望整個事務失敗,而不是數據不一致。

如果使用由應用程序管理的EntityManager,則可以通過編程方式控制事務( EntityManager.getTransaction() ),因此您可以控制哪些操作(插入/更新)應作為原子操作進行。

如果使用容器管理的EntityManager(Spring,JavaEE),則事務是聲明性的(@Transactional批注),因此事務基本上是方法范圍的(通常通過多個方法調用傳播)。

這只是涉及事務的冰山一角,還有諸如隔離級別和序列化事務之類的其他內容,但讓我們再談一次:)

這個操作不是已經原子了嗎? 我如何回滾單個entity.persist()

它可能是原子的,也可能不是原子的。 例如,如果您的實體與另一個具有CascadeType.PERSIST實體有關系,或者使用輔助表,則它將需要多個SQL語句來使其持久化。

EntityManager調用和SQL語句之間確實並沒有一對一的映射,這兩者在時間上也不需要重合。

暫無
暫無

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

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