TypeORM:如何 运行 SELECT... 在 queryRunner 中进行更新?
TypeORM: How to run SELECT... FOR UPDATE inside queryRunner?
如何在 queryRunner
中 运行 SELECT... FOR UPDATE
?
我看到 queryRunner 只能访问 manager
的 TypeORM 文档,我如何访问 Repository
来锁定记录。例如queryRunner.getRepository(User).setLock("pessimistic_write").....
console.log("----------------- START TRANSACTION -----------------");
const queryRunner = connection.createQueryRunner();
// establish real database connection using our new query runner
await queryRunner.connect();
await queryRunner.startTransaction();
try {
// `SELECT....FOR UPDATE`
// Want to .setLock("pessimistic_write")
// commit transaction now:
await queryRunner.commitTransaction();
} catch (err) {
// since we have errors lets rollback changes we made
await queryRunner.rollbackTransaction();
} finally {
// you need to release query runner which is manually created:
await queryRunner.release();
}
console.log("----------------- FINISH TRANSACTION -----------------");
欢迎任何建议!
Yupp,实际上我们可以从 manager
访问 Repository
,问题已解决
users = await queryRunner.manager
.getRepository(User)
.createQueryBuilder("user")
.useTransaction(true)
.setLock("pessimistic_write")
.where("user.status = :status", { status: status })
.getMany();
如何在 queryRunner
中 运行 SELECT... FOR UPDATE
?
我看到 queryRunner 只能访问 manager
的 TypeORM 文档,我如何访问 Repository
来锁定记录。例如queryRunner.getRepository(User).setLock("pessimistic_write").....
console.log("----------------- START TRANSACTION -----------------");
const queryRunner = connection.createQueryRunner();
// establish real database connection using our new query runner
await queryRunner.connect();
await queryRunner.startTransaction();
try {
// `SELECT....FOR UPDATE`
// Want to .setLock("pessimistic_write")
// commit transaction now:
await queryRunner.commitTransaction();
} catch (err) {
// since we have errors lets rollback changes we made
await queryRunner.rollbackTransaction();
} finally {
// you need to release query runner which is manually created:
await queryRunner.release();
}
console.log("----------------- FINISH TRANSACTION -----------------");
欢迎任何建议!
Yupp,实际上我们可以从 manager
访问 Repository
,问题已解决
users = await queryRunner.manager
.getRepository(User)
.createQueryBuilder("user")
.useTransaction(true)
.setLock("pessimistic_write")
.where("user.status = :status", { status: status })
.getMany();