1. What is transaction?
This is the definition from wiki :
A transaction symbolizes a unit of work performed within a database management system (or similar system) against a database, and treated in a coherent and reliable way independent of other transactions. A transaction generally represents any change in a database. Transactions in a database environment have two main purposes:
- To provide reliable units of work that allow correct recovery from failures and keep a database consistent even in cases of system failure, when execution stops (completely or partially) and many operations upon a database remain uncompleted, with unclear status.
- To provide isolation between programs accessing a database concurrently. If this isolation is not provided, the programs' outcomes are possibly erroneous.
A database transaction, by definition, must be atomic, consistent, isolated and durable.[1] Database practitioners often refer to these properties of database transactions using the acronym ACID.
Transactions provide an "all-or-nothing" proposition, stating that each work-unit performed in a databasemust either complete in its entirety or have no effect whatsoever. Further, the system mustisolate each transaction from other transactions, results must conform to existing constraints in the database, and transactions that complete successfully must get written to durable storage.
From my perspective, it is an all-or-nothing and isolated unit of work performed within a database management system against a database.
2. Three important interfaces in transaction
-
PlatformTransactionManager
Method Summary
Modifier and Type | Method and Description |
---|---|
void | commit(TransactionStatus status)
Commit the given transaction, with regard to its status.
|
TransactionStatus | getTransaction(TransactionDefinition definition)
Return a currently active transaction or create a new one, according to the specified propagation behavior.
|
void | rollback(TransactionStatus status)
Perform a rollback of the given transaction.
|
-
TransactionDefinition
-
Field Summary
Modifier and Type Field and Description static int
ISOLATION_DEFAULT
Use the default isolation level of the underlying datastore.static int
ISOLATION_READ_COMMITTED
Indicates that dirty reads are prevented; non-repeatable reads and phantom reads can occur.static int
ISOLATION_READ_UNCOMMITTED
Indicates that dirty reads, non-repeatable reads and phantom reads can occur.static int
ISOLATION_REPEATABLE_READ
Indicates that dirty reads and non-repeatable reads are prevented; phantom reads can occur.static int
ISOLATION_SERIALIZABLE
Indicates that dirty reads, non-repeatable reads and phantom reads are prevented.static int
PROPAGATION_MANDATORY
Support a current transaction; throw an exception if no current transaction exists.static int
PROPAGATION_NESTED
Execute within a nested transaction if a current transaction exists, behave likePROPAGATION_REQUIRED
else.static int
PROPAGATION_NEVER
Do not support a current transaction; throw an exception if a current transaction exists.static int
PROPAGATION_NOT_SUPPORTED
Do not support a current transaction; rather always execute non-transactionally.static int
PROPAGATION_REQUIRED
Support a current transaction; create a new one if none exists.static int
PROPAGATION_REQUIRES_NEW
Create a new transaction, suspending the current transaction if one exists.static int
PROPAGATION_SUPPORTS
Support a current transaction; execute non-transactionally if none exists.static int
TIMEOUT_DEFAULT
Use the default timeout of the underlying transaction system, or none if timeouts are not supported.
-
Method Summary
Modifier and Type Method and Description int
getIsolationLevel()
Return the isolation level.java.lang.String
getName()
Return the name of this transaction.int
getPropagationBehavior()
Return the propagation behavior.int
getTimeout()
Return the transaction timeout.boolean
isReadOnly()
Return whether to optimize as a read-only transaction.
-
TransactionStatus
Method Summary
Modifier and Type | Method and Description |
---|---|
void | flush()
Flush the underlying session to the datastore, if applicable: for example, all affected Hibernate/JPA sessions.
|
boolean | hasSavepoint()
Return whether this transaction internally carries a savepoint, that is, has been created as nested transaction based on a savepoint.
|
boolean | isCompleted()
Return whether this transaction is completed, that is, whether it has already been committed or rolled back.
|
boolean | isNewTransaction()
Return whether the present transaction is new (else participating in an existing transaction, or potentially not running in an actual transaction in the first place).
|
boolean | isRollbackOnly()
Return whether the transaction has been marked as rollback-only (either by the application or by the transaction infrastructure).
|
void | setRollbackOnly()
Set the transaction rollback-only.
|