postgresql Mikro ORM unique decorator在以下情况下未被强制执行

c9x0cxw0  于 2023-06-05  发布在  PostgreSQL
关注(0)|答案(1)|浏览(436)

使用此实体:

@Entity()
@Unique({ properties: ['case', 'csgoItem'] })
export class CaseItem {
  @PrimaryKey({ type: 'uuid', defaultRaw: 'uuid_generate_v4()' })
  id: string;

  @Property({ type: 'double precision', columnType: 'double precision' })
  probability: number;

  @ManyToOne(() => Case)
  case!: Case;

  @ManyToOne(() => CsgoItem, { cascade: [Cascade.REMOVE] })
  csgoItem!: CsgoItem;
}

当尝试插入一个重复项(基于case和csgItem的组合)时,mikroORM允许我这样做。如何让@unique装饰器处理关系?

jhdbpxl9

jhdbpxl91#

这是一个模式特性,ORM无论如何都不会强制执行它,所以您可能有不同步的模式-换句话说,没有创建唯一约束。
试着运行npx mikro-orm schema:update --run,如果它不仅仅是一个玩具项目,那么采用迁移更好。
关于您提供的代码的一些注解:

  • probability是double,因此它将Map到string,而不是number,因为您无法将double放入JS数字中
  • 不需要同时指定typecolumnType,在这里提供相同的值时不需要
  • cascade: [Cascade.REMOVE]可能没有执行您所认为的操作,即应用程序级级联,这意味着当您删除拥有实体时(CaseItem),其关系(标记为Cascade.REMOVE)也将被移除-这与onDelete: 'cascade'相反,我猜您希望这样做(因此,当删除目标(CsgoItem实体)时,所有者(因此Case)也将被删除

相关问题