Привет!
Для использования `query runner` в TypeOrm вы можете выполнить следующие шаги:
1. Создайте экземпляр `queryRunner` с помощью метода `createQueryBuilder`:
```typescript
const queryRunner = connection.createQueryRunner();
```
2. Начните транзакцию с помощью метода `startTransaction`:
```typescript
await queryRunner.startTransaction();
```
3. Выполните нужные вам операции с базой данных, используя `queryRunner`. Например, вы можете выполнить insert, update или delete операции:
```typescript
await queryRunner.query("INSERT INTO user (name) VALUES ('John')");
await queryRunner.query("UPDATE user SET age = 30 WHERE name = 'John'");
await queryRunner.query("DELETE FROM user WHERE age > 40");
```
4. Завершите транзакцию с помощью метода `commitTransaction`:
```typescript
await queryRunner.commitTransaction();
```
5. Не забудьте закрыть `queryRunner` после завершения:
```typescript
await queryRunner.release();
```
Примечание: Если в любой момент транзакции возникнет ошибка, вы можете откатить ее с помощью метода `rollbackTransaction`. Например:
```typescript
await queryRunner.rollbackTransaction();
```
Это все, что вам нужно знать для правильного использования `query runner` в TypeOrm. Удачи!
задаем условие для обновления записей
.returning('*')
указываем, что нужно вернуть обновленные записи
.updateEntity(true)
указываем, что нужно обновить сущности в памяти
.execute();
выполняем запрос и получаем результат
const p = await this.passwordUpdateLogsRepository
.createQueryBuilder('p', queryRunner)
создаем экземпляр QueryBuilder, передавая в него аргументы ('p', queryRunner)
.insert()
указываем, что нужно выполнить операцию вставки
.values({ user: { id: user.id } })
указываем значения для вставки
.execute();
выполняем запрос и получаем результат queryRunner.commitTransaction();
фиксируем транзакцию
return new HttpException(lang.ru.passwordChanged, HttpStatus.OK);
} catch (error) {
console.log(error);
queryRunner.rollbackTransaction();
откатываем транзакцию в случае ошибки
throw new BadRequestException(lang.ru.error);
} finally {
queryRunner.release();
освобождаем ресурсы }
Чтобы транзакции работали, нужно использовать метод createQueryBuilder и передать в него объект queryRunner. Примечание в конце вопроса имеет отрицательный ответ - транзакции не будут работать, если не будут использованы указанные методы и блоки кода.
const queryRunner = this.dataSource.createQueryRunner();
queryRunner.connect();
queryRunner.startTransaction();
try {
const u = await this.repository
.createQueryBuilder('u', queryRunner)
создаем экземпляр QueryBuilder, передавая в него аргументы ('u', queryRunner)
.update({ password: passwordHash })
.where('email = :email', { email: user.email })