Typeorm новой записи не присваивается айдишник новой записи связанной сущности
Есть две связанные сущности: юзер и его контакты. При создании нового юзера его контакты тоже новые (т.к. уникальные). Запись в базе юзера успешно создается. Для контактов тоже, но у них отсутствует привязка к новому пользователю (user_id = null).
Как сделать так, чтобы новой записи контактов присваивалась новая запись пользователя автоматом?
@Entity()
@TableInheritance({ column: { type: 'varchar', name: 'type' } })
export abstract class User extends Member {
@OneToMany('Contact', (contact: Contact) => contact.getUser, {
cascade: true,
})
public contacts: Contact[];
}
@Entity()
export class Contact {
@ManyToOne(() => User, (user) => user.contacts)
@JoinColumn({ name: 'user_id' })
public user: User;
}
export class CreateUserDTO implements Pick<User, 'contacts' | 'password'> {
contacts: Contact[];
password: string;
}
public async createEmployee(dto: CreateUserDTO): Promise<Employee> {
const newEmployee = await this.employeeRepository.create(dto);
const defaultRole = await this.roleService.getRoleByName(
RoleEnum.USER,
);
newEmployee.setRoles([defaultRole]);
newEmployee.setLogin(
newEmployee.getContacts.find((p) => p.getType === ContactTypeEnum.EMAIL)
.getValue,
);
newEmployee.setMemberType(MemberType.EMPLOYEE);
return this.employeeRepository.save(newEmployee);
}
UPD Геттеры в декораторах, оказывается, нельзя использовать
@Entity()
@TableInheritance({ column: { type: 'varchar', name: 'type' } })
export abstract class User extends Member {
@OneToMany(() => Contact, (contact) => contact.user, {
cascade: true,
})
public contacts: Contact[];
}
Ответы (2 шт):
Вот, фактически, ваша задача
const category1 = new Category()
category1.name = "ORMs"
const category2 = new Category()
category2.name = "Programming"
const question = new Question()
...
question.categories = [category1, category2]
await dataSource.manager.save(question)
Если cascade установлен в true, то для сохранения всех указанных выше данных в БД, достаточно одного вызова save, иначе понадобилось бы вызывать save для каждой сущности. Вот и всё отличие
Проблема решена. Связи не устанавливались из-за использования геттера в декораторе @OneToMany.

