Nestjs @PrimaryColumn上的关系也未涉及@PrimaryGeneratedColumn

Nestjs @PrimaryColumn上的关系也未涉及@PrimaryGeneratedColumn,nestjs,typeorm,Nestjs,Typeorm,我将NestJS与Typeorm配方一起使用,我对这两种方法都是新手。我们正在从Loopback3迁移,在Loopback3中,所有这些都是使用框架的基本特性实现的 对于我们实体之间的许多关系,我们有以下场景: 实体A带有“id”和“代码”字段,这两个字段都是主字段,但只有“id”是自动生成的,“代码”来自其他逻辑,并且始终保证是唯一的 实体B带有“a_代码”字段,该字段是实体a的外键 我们在A级有: @PrimaryGeneratedColumn() id: number;

我将NestJS与Typeorm配方一起使用,我对这两种方法都是新手。我们正在从Loopback3迁移,在Loopback3中,所有这些都是使用框架的基本特性实现的

对于我们实体之间的许多关系,我们有以下场景:

  • 实体A带有“id”和“代码”字段,这两个字段都是主字段,但只有“id”是自动生成的,“代码”来自其他逻辑,并且始终保证是唯一的
  • 实体B带有“a_代码”字段,该字段是实体a的外键
我们在A级有:

  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  @PrimaryColumn()
  code: string;

  @OneToMany(() => B, (b: B) => b.a_code)
  a_list: A[];
带控制器:

@Crud({
  model: {
    type: A
  },
  query: {
    join: {
      a_list: {
        eager: true,
      },
      'a.a_list': {
        eager: true,
        alias: 'a_list',
      }
    }
  }
})
B类:

  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  a_code: string;

  @ManyToOne(() => A, a => a.a_list) a: A;
出于遗留原因,我们需要保留这两个字段,因为这些对象可以被频繁地删除和重新插入(同时更改id),从而使关系“挂起”,而不会影响我们的业务逻辑

我注意到同步数据库,它所创建的,当然是(id,code)格式的索引,但是外键B=>A也是一样,这不是我想要的。 对我来说,生成一个主键(id)和一个唯一字段(代码)就可以在后者上建立关系


我想找出的是在TypeForm中实现这一点的最佳方法,以及是否有合法的方法。

如果我理解正确,在B类中,您希望a_代码与id一起是唯一的,而不是实体a的外键?@adamC是的,我在代码的列装饰器中添加了“unique:true”选项,但我无法在应用程序中获得正确的行为,例如,即使使用临时装饰器,代码似乎也没有在api响应中公开,可能我一直忽略了一些必要的内容请在实体类本身而不是特定列上尝试@Unique(,['id',a_code'])装饰器。这将保留“id”作为主键,并使每个id的a_代码都是唯一的