【发布时间】: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