这是我的示例数据模型
我已经声明了以下类:
@Entity({
name: 'user'
})
export class User {
@Column({ type: 'int4' })
@PrimaryColumn()
userid: number
@Column({name: 'name', type: 'varchar', length: 30})
name: string
@Column({name: 'age', type: 'int2'})
age: number
@ManyToMany(() => Department, (department)=> department.users)
@JoinTable({
name: 'department_user'
})
departments: Department[]
}
@Entity({ name: 'department' })
export class Department {
@Column({ type: 'int2' })
@PrimaryColumn()
departmentid: number
@Column({type: 'varchar', length: 50})
title: string
@Column({type:'text'})
notes: string
@ManyToMany(() => User, (user)=> user.departments)
@JoinTable({ name: 'department_user' })
users: User[]
}
Run Code Online (Sandbox Code Playgroud)
每当我运行该应用程序时,它都会创建DepartmentDepartmentId和userUserId列,而不使用相应联接表中的列。如何告诉 typeorm 仅使用连接表中预定义的连接列?
我使用以下语句重新创建了连接表:
create table department_user(
departmentid integer not null,
userid integer not null);
alter table department_user add constraint fk_dept_dept foreign key (departmentid) references department(departmentid);
alter table department_user add constraint fk_dept_user foreign key (userid) references "user"(userid);
alter table department_user add constraint pk_dept_user primary key (departmentid, userid);
Run Code Online (Sandbox Code Playgroud)
并修改实体如下:
用户
create table department_user(
departmentid integer not null,
userid integer not null);
alter table department_user add constraint fk_dept_dept foreign key (departmentid) references department(departmentid);
alter table department_user add constraint fk_dept_user foreign key (userid) references "user"(userid);
alter table department_user add constraint pk_dept_user primary key (departmentid, userid);
Run Code Online (Sandbox Code Playgroud)
部门
@ManyToMany(() => Department, (department)=> department.users)
@JoinTable({
name: 'department_user',
joinColumn: { name: 'userid' },
inverseJoinColumn: { name: 'departmentid' }
})
departments: Department[]
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,,y 外键约束消失了,并且创建了新的外键约束。知道我在这里做错了什么吗?
最后,我修改了类,如下所示,现在 TypeORM 接受关系并且不创建自己的关系。解决这个问题是一次非常痛苦的经历,而且关于这个装饰器的文档也没有说太多。
用户
@ManyToMany(() => User, (user)=> user.departments)
@JoinTable({
name: 'department_user',
joinColumn: { name: 'departmentid' },
inverseJoinColumn: { referencedColumnName: 'userid' }
})
users: User[]
}
Run Code Online (Sandbox Code Playgroud)
部门
@ManyToMany(() => Department, (department)=> department.users)
@JoinTable({
name: 'department_user',
joinColumn: {
name: 'userid',
foreignKeyConstraintName: 'fk_dept_user'
},
inverseJoinColumn: {
referencedColumnName: 'departmentid',
name: 'departmentid',
foreignKeyConstraintName: 'fk_dept_dept'
}
})
departments: Department[]
}
Run Code Online (Sandbox Code Playgroud)
小智 5
您可以指定连接列名称和反向连接列名称。像这样的东西应该适合你:
@ManyToMany(() => Department, (department)=> department.users)
@JoinTable({
name: 'department_user',
joinColumn: { name: 'userid' },
inverseJoinColumn: { name: 'departmentid' }
})
departments: Department[]
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
8030 次 |
最近记录: |