#database #typescript #backend #typeorm
Вопрос:
Я создаю 2 соединения, используя TypeORM, как показано ниже:
await createConnections([
{
name: "conn1",
type: "mssql",
host: "localhost",
port: parseInt(process.env.DB_PORT || "1433"),
username: process.env.DB_USER,
password: process.env.DB_PASS,
database: process.env.DB_NAME,
logging: true,
entities: [__dirname "/entities/example/*{.js,.ts}"],
options: {
enableArithAbort: true,
},
},
{
name: "conn2",
type: "mssql",
host: "localhost",
port: parseInt(process.env.DB_PORT || "1433"),
username: process.env.DB_USER,
password: process.env.DB_PASS,
database: process.env.DB_NAME1,
logging: true,
entities: [__dirname "/entities/*{.js,.ts}"],
options: {
enableArithAbort: true,
},
},
]);
Моя сущность сотрудника находится в conn1, Сущность пользователя-в conn2. Затем я настраиваю OneToOne между сотрудником и пользователем, например:
@ObjectType()
@Entity("Employees")
export class Employee extends BaseEntity {
...
@Field(() => User, { nullable: true })
@OneToOne(() => User, (user) => user.employee)
@JoinColumn({ name: "EmployeeID", referencedColumnName: "id" })
user: User | null = null;
}
@ObjectType()
@Entity({ name: "User" })
export class GMGUser extends BaseEntity {
...
@Field(() => Employee)
@OneToOne(() => Employee, (employee) => employee.user)
@JoinColumn({ name: "id", referencedColumnName: "EmployeeID" })
employee!: Employee;
}
Но я все равно получил ошибку: метаданные сущности для пользователя#сотрудник не были найдены или Сотрудник#пользователь не найден после проверки всех подключений; путь импорта и заклинания верны. Я пытаюсь настроить отношения в каждом из соединений, которые также работают. Но я не могу понять, как установить отношения между различными соединениями в TypeORM. Приветствуйте любые предложения или решения.
Комментарии:
1. работает ли.it., когда оба объекта находятся в одном и том же соединении?
2. Я попытался поместить все сущности в одно соединение, которое кажется нормальным, потому что ошибка не отображается. но я получил ноль благодаря отношениям с одним человеком. Все отношения работают в каждом соединении, но не работают между 2 соединениями. Я ищу способ создать связь между 2 различными соединениями.
3. Я бы предложил активировать журналы в обоих подключениях и отправить выполняемый запрос. Насколько я понимаю, я не использую «совместный столбец» при определении отношений. Кроме того, я не задаю путь к сущностям в определении соединения, а скорее создаю массив сущностей, который я отправил в createConnection.
4. Спасибо за ваши предложения. Причина, по которой я использую «JoinColumn», заключается в том, что я создаю отношения в исходящих таблицах, имена которых не соответствуют имени столбца typeorm по умолчанию. Используя JoinColumn, я могу указать имя столбца.