如何对ONE to MANY关系做出独特约束?

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

我有两个实体:projectactor

export abstract class BaseEntityModel {
  @PrimaryGeneratedColumn()
  id: number;
}

@Entity()
export class Project extends BaseEntityModel {
    @Column()
    title: string;

    @OneToMany(type => Actor, actor => actor.project)
    @JoinColumn()
    actors: Actor[];
}

@Entity()
export class Actor extends BaseEntityModel {
    @Column({unique: true}) 
    title: string;

    @ManyToOne(type => Project, project => project.actors)
    project: Project;
}

我希望每个项目都有独特的演员头衔,但不是跨数据库。

OK

projects: [
  {
    title: "webapp",
    actors: [
      {
        title: "dev"
      }
    ]
  },
  {
    title: "json-parser",
    actors: [
      {
        title: "dev"
      },
      {
        title: "target"
      }
    ]
  }
]

NOT OK

projects: [
  {
    title: "webapp",
    actors: [
      {
        title: "dev"
      },
      {
        title: "dev"
      }
    ]
  },
  {
    title: "json-parser",
    actors: [
      {
        title: "dev"
      },
      {
        title: "target"
      }
    ]
  }
]

@Column({unique: true})在桌子上工作独特,这不是我想要的。还有类装饰者@Unique(['title']),但它似乎也在做同样的事情。

我可以使用TypeORM中的某些东西,或者我必须检查自己是否已经存在于项目中的actor.title。避免在同一个项目中重复actor.title。同时保持在数据库中多次使用相同actor.title的可能性?

请注意,Actor实体不应在projects之间共享(没有多对多的关系)。

database postgresql orm nestjs typeorm
1个回答
1
投票

@Unique(['title', 'project'])类装饰器添加到Actor似乎是我正在寻找的,请注意我以某种方式“损坏”了我的数据库并且只有在删除/创建它之后才能正常迁移。

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