Back to Sequelize

Transaction

static/v5/class/lib/transaction.js~Transaction.html

latest10.4 KB
Original Source

publicclass| source

Transaction

The transaction object is used to identify a running transaction. It is created by calling Sequelize.transaction(). To run a query under a transaction, you should pass the transaction in the options object.

See:

Static Member Summary

| Static Public Members | | publicstaticget |

ISOLATION_LEVELS: {"READ_UNCOMMITTED": string, "READ_COMMITTED": string, "REPEATABLE_READ": string, "SERIALIZABLE": string}

Isolation levels can be set per-transaction by passing options.isolationLevel to sequelize.transaction.

| | | publicstaticget |

LOCK: Object: {"UPDATE": string, "SHARE": string, "KEY_SHARE": string, "NO_KEY_UPDATE": string}

Possible options for row locking.

| | | publicstaticget |

TYPES: {"DEFERRED": string, "IMMEDIATE": string, "EXCLUSIVE": string}

Types can be set per-transaction by passing options.type to sequelize.transaction.

| |

Constructor Summary

| Public Constructor | | public |

constructor(sequelize: Sequelize, options: Object)

Creates a new transaction instance

| |

Member Summary

| Public Members | | publicget |

LOCK: *

Please see Transaction.LOCK

| |

Method Summary

| Public Methods | | public |

afterCommit(fn: Function)

A hook that is run after a transaction is committed

| | | public |

commit(): Promise

Commit the transaction

| | | public |

rollback(): Promise

Rollback (abort) the transaction

| |

Static Public Members

publicstaticgetISOLATION_LEVELS: {"READ_UNCOMMITTED": string, "READ_COMMITTED": string, "REPEATABLE_READ": string, "SERIALIZABLE": string} source

Isolation levels can be set per-transaction by passing options.isolationLevel to sequelize.transaction. Sequelize uses the default isolation level of the database, you can override this by passing options.isolationLevel in Sequelize constructor options.

Pass in the desired level as the first argument:

Properties:

| Name | Type | Attribute | Description | | READ_UNCOMMITTED | * | | | | READ_COMMITTED | * | | | | REPEATABLE_READ | * | | | | SERIALIZABLE | * | | |

Example:

return sequelize.transaction({isolationLevel: Sequelize.Transaction.ISOLATION_LEVELS.SERIALIZABLE}, transaction => {
  // your transactions
}).then(result => {
  // transaction has been committed. Do something after the commit if required.
}).catch(err => {
  // do something with the err.
});

publicstaticgetLOCK: Object: {"UPDATE": string, "SHARE": string, "KEY_SHARE": string, "NO_KEY_UPDATE": string} source

Possible options for row locking. Used in conjunction with find calls:

Properties:

| Name | Type | Attribute | Description | | UPDATE | * | | | | SHARE | * | | | | KEY_SHARE | * | |

Postgres 9.3+ only

| | NO_KEY_UPDATE | * | |

Postgres 9.3+ only

|

Return:

| Object |

Return Properties:

| Name | Type | Attribute | Description | | UPDATE | * | | | | SHARE | * | | | | KEY_SHARE | * | |

Postgres 9.3+ only

| | NO_KEY_UPDATE | * | |

Postgres 9.3+ only

|

Example:

// t1 is a transaction
Model.findAll({
  where: ...,
  transaction: t1,
  lock: t1.LOCK...
});

Postgres also supports specific locks while eager loading by using OF:

UserModel.findAll({
  where: ...,
  include: [TaskModel, ...],
  transaction: t1,
  lock: {
    level: t1.LOCK...,
    of: UserModel
  }
});

# UserModel will be locked but TaskModel won't!

You can also skip locked rows:

// t1 is a transaction
Model.findAll({
  where: ...,
  transaction: t1,
  lock: true,
  skipLocked: true
});
# The query will now return any rows that aren't locked by another transaction

publicstaticgetTYPES: {"DEFERRED": string, "IMMEDIATE": string, "EXCLUSIVE": string} source

Types can be set per-transaction by passing options.type to sequelize.transaction. Default to DEFERRED but you can override the default type by passing options.transactionType in new Sequelize. Sqlite only.

Pass in the desired level as the first argument:

Properties:

| Name | Type | Attribute | Description | | DEFERRED | * | | | | IMMEDIATE | * | | | | EXCLUSIVE | * | | |

Example:

return sequelize.transaction({type: Sequelize.Transaction.TYPES.EXCLUSIVE}, transaction => {
  // your transactions
}).then(result => {
  // transaction has been committed. Do something after the commit if required.
}).catch(err => {
  // do something with the err.
});

Public Constructors

publicconstructor(sequelize: Sequelize, options: Object) source

Creates a new transaction instance

Params:

| Name | Type | Attribute | Description | | sequelize | Sequelize | |

A configured sequelize Instance

| | options | Object | |

An object with options

| | options.type | string |

  • optional

|

Sets the type of the transaction. Sqlite only

| | options.isolationLevel | string |

  • optional

|

Sets the isolation level of the transaction.

| | options.deferrable | string |

  • optional

|

Sets the constraints to be deferred or immediately checked. PostgreSQL only

|

Public Members

publicgetLOCK: * source

Please see Transaction.LOCK

Public Methods

publicafterCommit(fn: Function) source

A hook that is run after a transaction is committed

Params:

| Name | Type | Attribute | Description | | fn | Function | |

A callback function that is called with the committed transaction

|

publiccommit(): Promise source

Commit the transaction

Return:

| Promise |

publicrollback(): Promise source

Rollback (abort) the transaction

Return:

| Promise |