首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >TypeORM @JoinTable()如何指定自定义连接列?

TypeORM @JoinTable()如何指定自定义连接列?
EN

Stack Overflow用户
提问于 2022-07-06 07:23:30
回答 1查看 1.3K关注 0票数 1

这是我的样本数据模型

我已宣布下列课程:

代码语言:javascript
运行
复制
@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所述)

我用以下语句重新创建了联接表:

代码语言:javascript
运行
复制
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);

并对这些实体做了如下修改:

用户

代码语言:javascript
运行
复制
  @ManyToMany(() => Department, (department)=> department.users)
  @JoinTable({ 
    name: 'department_user',
    joinColumn: { name: 'userid' },
    inverseJoinColumn: { name: 'departmentid' }
  })
  departments: Department[]
}

部门

代码语言:javascript
运行
复制
  @ManyToMany(() => User, (user)=> user.departments)
  @JoinTable({
    name: 'department_user',
    joinColumn: { name: 'departmentid' },
    inverseJoinColumn: { referencedColumnName: 'userid' }
  })
  users: User[]  
}

它确实运行时没有出现错误,但是当它运行时,表结构将被修改为

如您所见,y外键约束消失了,并创建了新的约束。知道我做错什么了吗?

更新3

最后,我修改了类,如下所示,现在TypeORM接受这些关系,而不创建自己的关系。解决这个问题是一次非常痛苦的经历,而关于这个装饰师的文档也没有说明什么。

用户

代码语言:javascript
运行
复制
  @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[]
}

部门

代码语言:javascript
运行
复制
@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[]  
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-06 20:48:28

可以指定联接列名和反向连接列名。像这样的东西应该对你有用:

代码语言:javascript
运行
复制
@ManyToMany(() => Department, (department)=> department.users)
@JoinTable({ 
    name: 'department_user',
    joinColumn: { name: 'userid' },
    inverseJoinColumn: { name: 'departmentid' }
})
departments: Department[]
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72879395

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档