如何对一对多关系做出独特的约束?

时间:2019-02-15 15:50:49

标签: database postgresql orm nestjs typeorm

我有两个实体: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;
}

我希望每个项目都具有唯一的演员称号,但不要跨数据库。

确定

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

不好

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之间共享(无多对多关系)。

1 个答案:

答案 0 :(得分:1)

@Unique(['title', 'project'])添加Actor类修饰符似乎是我要找的东西,请注意,我以某种方式“破坏了”数据库,并且只有在删除/创建数据库之后,迁移才能正常工作。