TypeORM:保存时无法读取未定义的属性“inverseJoinColumns”
Posted
技术标签:
【中文标题】TypeORM:保存时无法读取未定义的属性“inverseJoinColumns”【英文标题】:TypeORM: Cannot read property 'inverseJoinColumns' of undefined when saving 【发布时间】:2017-12-20 13:31:18 【问题描述】:用例:如果用户尚未在数据库中创建,则创建它 - 如果用户已存在,则更新它。
这样做的逻辑是有效的。由于 TypeORM 的 .save()
更新实体或在不可用时更新它们,我想使用这种方法。
我的问题:创作作品但不更新。执行此操作时,它会从 RelationIdLoader
抛出此错误:
this.userRepository.save(user); // user = newly created or updated entity
TypeError:无法读取未定义的属性“inverseJoinColumns”
更新的和创建的唯一区别是更新的有一个id
属性,它是一个uuid/string。
更新
@PrimaryGeneratedColumn('uuid') public id: string;
... // some columns without relations
@OneToMany(type => Finding, finding => finding.reporter)
public reportedFindings: Finding[];
@OneToMany(type => Finding, finding => finding.responsible)
public responsibleFindings: Finding[];
@ManyToMany(type => DataCenter)
public dataCenterResponsiblities: DataCenter[];
@ManyToMany(type => Finding)
public informedFindings: Finding[];
【问题讨论】:
显示你的实体,可能是你错误地设置了实体关系 @pleerock 就这么做了。感谢您的关注。 如果你使用@ManyToMany
,你也必须放置@JoinTable
装饰器(只在拥有方,因为你有一个单向关系,所以你只把它放在这里)。
修复了它。非常感谢@pleerock 这个伟大的图书馆。很快就会有另一个问题出现。 :)
请找时间回答你自己的问题并接受它以改善***的用户体验
【参考方案1】:
正如@pleerock 所说,所有@ManyToMany
都必须在拥有方包含@JoinTable
装饰器。
所以我的实际问题的具体解决方案如下:
@ManyToMany(type => DataCenter)
@JoinTable()
public dataCenterResponsiblities: DataCenter[];
@JoinTable()
@ManyToMany(type => Finding)
public informedFindings: Finding[];
This is actually well described in the docs.
【讨论】:
拥有方是指更新关系的一方? @Nicu 示例:通过数据中心的 ID 将结果分配给数据中心。所以数据中心“拥有”调查结果[]。以上是关于TypeORM:保存时无法读取未定义的属性“inverseJoinColumns”的主要内容,如果未能解决你的问题,请参考以下文章
NestJS TypeORM InjectRepository 无法读取未定义的属性“原型”
“无法读取未定义的属性 'tablePath'”(类型 ORM)
JQuery:未捕获的类型错误:无法读取未定义的属性“调用”