Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

TypeORM: How to run SELECT... FOR UPDATE inside queryRunner?

Tags:

typeorm

How can I run SELECT... FOR UPDATE inside queryRunner ? I see the TypeORM doc that queryRunner can only access manager, how I can access Repository to lock record. For example 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 -----------------");

Any advice is welcome!

like image 416
Tran B. V. Son Avatar asked Dec 07 '25 05:12

Tran B. V. Son


1 Answers

Yupp, actually we can access Repository from manager, problem solved 👍

        users = await queryRunner.manager
          .getRepository(User)
          .createQueryBuilder("user")
          .useTransaction(true)
          .setLock("pessimistic_write")
          .where("user.status = :status", { status: status })
          .getMany();
like image 104
Tran B. V. Son Avatar answered Dec 12 '25 03:12

Tran B. V. Son



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!