Метод сохранения TypeOrm не обновляет объект - PullRequest
0 голосов
/ 07 августа 2020

Рассмотрим этот объект:

// account.ts
import { Entity, PrimaryGeneratedColumn, PrimaryColumn, Column, BaseEntity, Index, CreateDateColumn,  UpdateDateColumn, OneToOne, JoinColumn } from 'typeorm'

@Entity()
export class Account extends BaseEntity {
  @PrimaryGeneratedColumn()
  id: number

  @Column({ length: 50, unique: true })
  @Index({ unique: true })
  accountIdentifier: string

  @Column({ nullable: true, length: 100 })
  name?: string
}

Чтобы сохранить новый account или вернуть существующий account, у нас есть этот рабочий код:

const knownAccount = await Account.findOne({ accountIdentifier: token.oid })
if (knownAccount) return done(null, knownAccount, token)

const account = new Account()
account.accountIdentifier = token.oid
account.name = token.name
account.userName = (token as any).preferred_username
const newAccount = await account.save()
return done(null, newAccount, token)

В docs в нем говорится:

save - Сохраняет заданный объект или массив объектов. Если объект уже существует в базе данных, он обновляется. Если объект не существует в базе данных, он вставляется. Он сохраняет все заданные объекты в одной транзакции (в случае объекта менеджер не является транзакционным). Также поддерживает частичное обновление, так как все неопределенные свойства пропускаются. Возвращает сохраненный объект / объекты.

Таким образом, мы ожидаем, что этот код будет работать и заменить предыдущий код, но он, похоже, не обновляет строку, а скорее жалуется на вставку повторяющегося ключа:

const account = await Account.save({
   accountIdentifier = token.oid,
   name = token.name,
   userName = (token as any).preferred_username,
})
return done(null, account, token)

IDE показывает, что обновит или вставит, но не обновляет: введите описание изображения здесь

Как возможно правильно использовать метод save? Таким образом, он добавляет учетную запись, если она не существует, и / или обновляет учетную запись, когда она уже существует.

...