Не удаляется 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);
}
}
Подскажите пожалуйста. Что нужно указать в entity Token, чтобы данный объект удалялся при удалении юзера? При удалении обеъкта Тoken в юзере поле становится null, как мне и нужно, а вот при удалении юзера Тoken из БД не удаляется. onDelete в Тoken перепробовал все, что можно, но не помогает.
Подскажите обязательно ли указывать в моем случае userId: Relation писал просто string, все работало, но как понимаю нам нужно грамотно указывать типы на которые ссылается поле.
Еще подскажите кто понимает, что делает 2 аргумент(функция) переданная в декоратор @OneToMany и почему в документации они ссылаются не на поле id, а на поля которые ссылаются друг на друга? Пример ниже ссылка на документацию:
@OneToMany(type => Photo, photo => photo.user)
photos: Photo[];