JPA的事務註解 Transactional總結

2021-10-07 05:19:33 字數 1710 閱讀 1589

異常在a方法內丟擲,則a方法就得加註解

多個方法巢狀呼叫,如果都有 @transactional 註解,則產生事務傳遞,需要 propagation.required

如果註解上只寫 @transactional 預設只對 runtimeexception 回滾,而非 exception 進行回滾

如果要對 checked exceptions 進行回滾,則需要 @transactional(rollbackfor = exception.class)

隔離級別是指若干個併發的事務之間的隔離程度。transactiondefinition 介面中定義了五個表示隔離級別的常量:

transactiondefinition.isolation_default:這是預設值,表示使用底層資料庫的預設隔離級別。對大部分資料庫而言,通常這值就是transactiondefinition.isolation_read_committed。

transactiondefinition.isolation_read_uncommitted:該隔離級別表示乙個事務可以讀取另乙個事務修改但還沒有提交的資料。該級別不能防止髒讀,不可重複讀和幻讀,因此很少使用該隔離級別。比如postgresql實際上並沒有此級別。

transactiondefinition.isolation_read_committed:該隔離級別表示乙個事務只能讀取另乙個事務已經提交的資料。該級別可以防止髒讀,這也是大多數情況下的推薦值。

transactiondefinition.isolation_repeatable_read:該隔離級別表示乙個事務在整個過程中可以多次重複執行某個查詢,並且每次返回的記錄都相同。該級別可以防止髒讀和不可重複讀。

transactiondefinition.isolation_serializable:所有的事務依次逐個執行,這樣事務之間就完全不可能產生干擾,也就是說,該級別可以防止髒讀、不可重複讀以及幻讀。但是這將嚴重影響程式的效能。通常情況下也不會用到該級別。

所謂事務的傳播行為是指,如果在開始當前事務之前,乙個事務上下文已經存在,此時有若干選項可以指定乙個事務性方法的執行行為。在transactiondefinition定義中包括了如下幾個表示傳播行為的常量:

transactiondefinition.propagation_required:如果當前存在事務,則加入該事務;如果當前沒有事務,則建立乙個新的事務。這是預設值。

transactiondefinition.propagation_requires_new:建立乙個新的事務,如果當前存在事務,則把當前事務掛起。

transactiondefinition.propagation_supports:如果當前存在事務,則加入該事務;如果當前沒有事務,則以非事務的方式繼續執行。

transactiondefinition.propagation_not_supported:以非事務方式執行,如果當前存在事務,則把當前事務掛起。

transactiondefinition.propagation_never:以非事務方式執行,如果當前存在事務,則丟擲異常。

transactiondefinition.propagation_mandatory:如果當前存在事務,則加入該事務;如果當前沒有事務,則丟擲異常。

transactiondefinition.propagation_nested:如果當前存在事務,則建立乙個事務作為當前事務的巢狀事務來執行;如果當前沒有事務,則該取值等價於 transactiondefinition.propagation_required。

JPA註解補充

fetchtype.lazy和 fetchtype.eager 什麼區別?1 fetchtype.lazy 懶載入,載入乙個實體時,定義懶載入的屬性不會馬上從資料庫中載入。2 fetchtype.eager 急載入,載入乙個實體時,定義急載入的屬性會立即從資料庫中載入。3 比方 user 類有兩個屬...

JPA註解查詢

1 entity name entityname 必須,name為可選,對應資料庫中一的個表 entity 標識這個pojo是乙個jpa實體 public class users implements serializable 2 table name catalog schema 可選,通常和 e...

JPA實體註解

entity name entityname 必須,name為可選,對應資料庫中一的個表 table name catalog schema 可選,通常和 entity配合使用,只能標註在實體的class定義處,表示實體對應的資料庫表的資訊 name 可選,表示表的名稱。預設地,表名和實體名稱一致,...