如何在遗留表上建立这种一对一的关系?

问题描述 投票:0回答:1

我正在尝试将两个旧用户表链接在一起,同时为我们现有的系统编写 Web 应用程序(Angular、NestJS、TypeorM)。但是,我不断收到错误“TypeORMError:在实体 Foruser 中找不到引用的列 userid”

这是身份验证表,用于包含用户密码等内容。

@Index("pk_foruser", ["id"], { unique: true })
@Entity("foruser", { schema: "dbo" })
export class Foruser {
  @PrimaryColumn("varchar", { name: "id", length: 28 })
  id: string;

  @OneToOne(() => Adbuinfo)
  Profile: Relation<Adbuinfo>;
}

这是用户配置文件表,其中包含权限和应用程序详细信息。


@Index("pk_adbuinfo", ["userid"], { unique: true })
@Entity("adbuinfo", { schema: "dbo" })
export class Adbuinfo {
  @PrimaryColumn("varchar", {  name: "userid", length: 32 })
  userid: string;

  @OneToOne(() => Foruser, (Foruser) => Foruser.Profile, { cascade: true})
  @JoinColumn({name: 'id', referencedColumnName: 'id'})
  User: Relation<Foruser>;
}

我不能只更改主键的列名称,因为我们有其他应用程序使用这些表。

编辑:这是错误的完整堆栈跟踪。

TypeORMError: Referenced column userid was not found in entity Foruser
    at C:\Development\Web Adtakr-1\adtakr-service\src\metadata-builder\RelationJoinColumnBuilder.ts:151:27
    at Array.map (<anonymous>)
    at RelationJoinColumnBuilder.collectReferencedColumns (C:\Development\Web Adtakr-1\adtakr-service\src\metadata-builder\RelationJoinColumnBuilder.ts:143:32)
    at RelationJoinColumnBuilder.build (C:\Development\Web Adtakr-1\adtakr-service\src\metadata-builder\RelationJoinColumnBuilder.ts:62:40)
    at C:\Development\Web Adtakr-1\adtakr-service\src\metadata-builder\EntityMetadataBuilder.ts:180:60
    at Array.forEach (<anonymous>)
    at C:\Development\Web Adtakr-1\adtakr-service\src\metadata-builder\EntityMetadataBuilder.ts:173:22
    at Array.forEach (<anonymous>)
    at EntityMetadataBuilder.build (C:\Development\Web Adtakr-1\adtakr-service\src\metadata-builder\EntityMetadataBuilder.ts:166:14)
    at ConnectionMetadataBuilder.buildEntityMetadatas (C:\Development\Web Adtakr-1\adtakr-service\src\connection\ConnectionMetadataBuilder.ts:106:11)

如果我将名称和/或referencedColumnName更改为userid,或将连接列留空,则错误将更改为无法在Foruser中找到userid。

typescript nestjs typeorm
1个回答
0
投票

我已经找到了问题的根源。我目光狭隘,只关注那两张桌子。问题出在与 Foruser 具有一对多关系的第三个实体中。

对于将来关注这个问题的人(假设mod不会删除它)。请记住,问题可能并不在您认为的地方。

© www.soinside.com 2019 - 2024. All rights reserved.