【问题标题】:TypeORM - One-To-Many relationship defined in EntitySchemaTypeORM - EntitySchema 中定义的一对多关系
【发布时间】:2021-12-08 01:40:31
【问题描述】:

我正在将 TypeORM 与 JS 一起使用,它的文档非常少,所以我在那里找不到我的问题的解决方案。 我想创建一个一对多的双向关系并且无法克服以下异常:

TypeORMError: Entity metadata for Team#groups was not found. Check if you specified a correct entity object and if it's connected in the connection options.

这就是两个实体的定义(一个团队可能有多个组):

module.exports = new EntitySchema({
  name: 'Team',
  tableName: 'team',
  columns: {
    id: {
      primary: true,
      type: 'uuid',
      generated: true,
    },
    name: {
      type: 'varchar',
    },
    
  },
  relations: {
    groups: {
      target: 'TeamGroups',
      type: 'one-to-many',
      inverseSide: 'team_id',
    },
  },
})
module.exports = new EntitySchema({
  name: 'TeamsGroups',
  tableName: 'team_group',
  columns: {
    team_id: {
      primary: true,
      type: 'uuid',
    },
    group_id: {
      primary: true,
      type: 'uuid',
    },
  },
  relations: {
    team_id: {
      target: 'Team',
      type: 'many-to-one',
      joinColumn: true,
    },
  },
})

我错过了什么?

【问题讨论】:

  • 只是好奇,为什么在文档中显示的装饰器上使用 EntitySchema? typeorm.io/#/entities 至于这个问题,我对实体模式定义不是很熟悉,但似乎relations 的键group 应该成为另一个实体的名称值,即TeamsGroups。同样,我会将该关系下的键名与其他实体定义名相匹配。
  • 原因是我用的是js而不是ts。我不确定 typeORM 是否支持实体装饰器。关于您的建议,我认为不是原因,因为关系的关键是用于访问关系的字段名称(teamGroup.team_id 应该引用相关团队)
  • 实体名称是您用来访问关系的名称,至少在带有装饰器的 Typescript 中是这样。即,如果您的实体名称是用户,您将调用getRepository(User)。您可以使用 Query Builder 使用表名,但这更像是一种变通方法。

标签: javascript typeorm


【解决方案1】:

我无法测试,但我相当确定是这个,查看错误和文档:

module.exports = new EntitySchema({
  name: 'Team',
  tableName: 'team',
  columns: {
    id: {
      primary: true,
      type: 'uuid',
      generated: true,
    },
    name: {
      type: 'varchar',
    },
    
  },
  relations: {
    TeamGroups: {
      target: 'TeamGroups',
      type: 'one-to-many',
      inverseSide: 'team_id',
    },
  },
})
module.exports = new EntitySchema({
  name: 'TeamsGroups',
  tableName: 'team_group',
  columns: {
    team_id: {
      primary: true,
      type: 'uuid',
    },
    group_id: {
      primary: true,
      type: 'uuid',
    },
  },
  relations: {
    Team: {
      target: 'Team',
      type: 'many-to-one',
      joinColumn: true,
    },
  },
})

【讨论】:

    猜你喜欢
    • 2021-12-26
    • 2022-01-02
    • 1970-01-01
    • 2020-06-25
    • 1970-01-01
    • 2020-06-29
    • 2021-02-08
    • 2020-12-07
    • 2021-10-17
    相关资源
    最近更新 更多