スコープ
| 名前 | 説明 |
|---|---|
| 必須 | 既存のトランザクションを使用し、存在しない場合は新しいトランザクションを開始します。これがデフォルトのスコープです。 |
| 必須 | トランザクションは開始済でなければなりません。TransactionRequiredException がスローされます。 |
| サポート | トランザクションが存在する場合は既存のトランザクションを使用し、それ以外の場合はメソッドはトランザクションを使用しません。注意して使用してください。 |
| 新規必須 | 常に新しいトランザクションを開始します。必要に応じて既存のトランザクションを一時停止します。 |
| 未対応 | 必要に応じて既存のトランザクションを一時停止します。メソッドはトランザクションなしで実行されます。 |
| 決して | 既存のトランザクションがある場合、例外がスローされます。メソッドはトランザクションなしで実行されます。 |
デフォルトは必須
指定されていない場合のデフォルトトランザクションスコープはREQUIREDです。これは、ほとんどのアプリケーションで最も一般的に使用されるトランザクションスコープです。
@Transactionalを使用した例
@Transactionalでアノテーションされたメソッドに他のトランザクションスコープを指定できます。
@Transactional(type = TxType.REQUIRES_NEW)
public void doInner() {
// execute using a new transaction ...
}
beginTransaction()を使用した例
beginTransaction(TxScope)を使用して他のトランザクションスコープを指定できます。
try (Transaction transaction = database.beginTransaction(TxScope.requiresNew())) {
// using a new transaction ...
transaction.commit();
}