这是我的样本数据模型
我已宣布下列课程:
@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[]
}
每当我运行该应用程序时,它都会创建departmentDepartmentId & userUserId列,而不使用相应的联接表中的列。如何告诉typeorm只使用联接表中预定义的联接列?
更新2(如@suvantorw所述)
我用以下语句重新创建了联接表:
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);
并对这些实体做了如下修改:
用户
@ManyToMany(() => Department, (department)=> department.users)
@JoinTable({
name: 'department_user',
joinColumn: { name: 'userid' },
inverseJoinColumn: { name: 'departmentid' }
})
departments: Department[]
}
部门
@ManyToMany(() => User, (user)=> user.departments)
@JoinTable({
name: 'department_user',
joinColumn: { name: 'departmentid' },
inverseJoinColumn: { referencedColumnName: 'userid' }
})
users: User[]
}
它确实运行时没有出现错误,但是当它运行时,表结构将被修改为
如您所见,y外键约束消失了,并创建了新的约束。知道我做错什么了吗?
更新3
最后,我修改了类,如下所示,现在TypeORM接受这些关系,而不创建自己的关系。解决这个问题是一次非常痛苦的经历,而关于这个装饰师的文档也没有说明什么。
用户
@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[]
}
部门
@ManyToMany(() => User, (user)=> user.departments)
@JoinTable({
name: 'department_user',
joinColumn: {
name: 'departmentid',
foreignKeyConstraintName: 'fk_dept_dept'
},
inverseJoinColumn: {
referencedColumnName: 'userid',
name: 'userid',
foreignKeyConstraintName: 'fk_dept_user'
}
})
users: User[]
}
发布于 2022-07-06 20:48:28
可以指定联接列名和反向连接列名。像这样的东西应该对你有用:
@ManyToMany(() => Department, (department)=> department.users)
@JoinTable({
name: 'department_user',
joinColumn: { name: 'userid' },
inverseJoinColumn: { name: 'departmentid' }
})
departments: Department[]
https://stackoverflow.com/questions/72879395
复制相似问题