gpt4 book ai didi

database - 如何对一对多关系进行唯一约束?

转载 作者:行者123 更新时间:2023-12-02 00:23:13 25 4
gpt4 key购买 nike

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

我希望每个项目都有唯一的 Actor 头衔,但不是跨数据库。

好的

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 实体不应在项目 之间共享(没有多对多关系)。

最佳答案

@Unique(['title', 'project']) 类装饰器添加到 Actor 似乎是我想要的,请注意我已经“损坏"我的数据库以某种方式和迁移仅在删除/创建后才能正常工作。

关于database - 如何对一对多关系进行唯一约束?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54712765/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com