使用此实体:
@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
装饰器处理关系?
1条答案
按热度按时间jhdbpxl91#
这是一个模式特性,ORM无论如何都不会强制执行它,所以您可能有不同步的模式-换句话说,没有创建唯一约束。
试着运行
npx mikro-orm schema:update --run
,如果它不仅仅是一个玩具项目,那么采用迁移更好。关于您提供的代码的一些注解:
probability
是double,因此它将Map到string
,而不是number
,因为您无法将double放入JS数字中type
和columnType
,在这里提供相同的值时不需要cascade: [Cascade.REMOVE]
可能没有执行您所认为的操作,即应用程序级级联,这意味着当您删除拥有实体时(CaseItem),其关系(标记为Cascade.REMOVE
)也将被移除-这与onDelete: 'cascade'
相反,我猜您希望这样做(因此,当删除目标(CsgoItem
实体)时,所有者(因此Case
)也将被删除