Не удаляется relation объект при удалении связанного объекта. OneToOne

Стек: nest, typeorm, postgres.

Есть 2 таблицы: User и Token. Они связаны OneToOne. Связь двунаправленная не нужно, но я делаю это потому, что хочу указать опции, которые помогут удалить токен при удалении юзера. Пример ниже.

@Entity("users")
export class User implements IUser {
  @PrimaryGeneratedColumn("uuid")
  id: string;

  @Column({ nullable: true })
  @OneToOne(() => Token, {
    cascade: true, // чтобы создались каскадно сущности
    eager: true, // загружать сущность автоматически
    onDelete: "SET NULL", // при удалении связанной сущности установить null
    nullable: true, 
  })
  @JoinColumn({
    name: "tokens",
    referencedColumnName: "id",
  })
  tokens: Relation<Token> | null;

  constructor(userInfo: Partial<User>) {
    Object.assign(this, userInfo);
  }
}

@Entity("token")
export class Token implements IToken {
  @PrimaryGeneratedColumn("uuid")
  id: string;

  @Column()
  @OneToOne(() => User, {
    onDelete: "CASCADE",
  })
  userId: Relation<User>;

  constructor(userInfo: Partial<Token>) {
    Object.assign(this, userInfo);
  }
}
  1. Подскажите пожалуйста. Что нужно указать в entity Token, чтобы данный объект удалялся при удалении юзера? При удалении обеъкта Тoken в юзере поле становится null, как мне и нужно, а вот при удалении юзера Тoken из БД не удаляется. onDelete в Тoken перепробовал все, что можно, но не помогает.

  2. Подскажите обязательно ли указывать в моем случае userId: Relation писал просто string, все работало, но как понимаю нам нужно грамотно указывать типы на которые ссылается поле.

  3. Еще подскажите кто понимает, что делает 2 аргумент(функция) переданная в декоратор @OneToMany и почему в документации они ссылаются не на поле id, а на поля которые ссылаются друг на друга? Пример ниже ссылка на документацию:

 @OneToMany(type => Photo, photo => photo.user)
  photos: Photo[];

Ответы (0 шт):