MySQL typeORM中的复合主键

时间:2020-10-20 06:01:26

标签: typeorm

我需要创建一个复合主键。我有两个实体,分别是用户和任务。

用户实体

@Entity('users')
export class User extends BaseEntity {
    @PrimaryGeneratedColumn('uuid')
    public readonly id: string;

    @Column({ nullable: false, type: 'varchar', length: 16 })
    public readonly name: string;

    @OneToMany(() => Task, (task: Task) => task.user)
    public readonly tasks: Task[];
}

任务实体

@Entity('tasks')
export class Task extends BaseEntity {
    @PrimaryGeneratedColumn('uuid')
    public readonly id: string;

    @Column({ nullable: true, type: 'varchar', length: 16 })
    public readonly name: string;

    @Column({ type: 'varchar', nullable: false })
    public readonly userId: string;

    @ManyToOne(() => User, (user: User) => user.tasks)
    @JoinColumn({ name: 'userId' })
    public readonly user: User;
}

在我的表task中,我必须使用复合主键。例如4a00a3738e90e-0007。是用户ID'4a00a3738e90e',是用户的'0007'计数任务。

如何创建复合主键?我在文档中没有找到决定。

id                      name    userId
4a00a3738e90e-0001      task1   4a00a3738e90e
4a00a3738e90e-0002      task2   4a00a3738e90e
1er04r35l56en-0001      task1   1er04r35l56en

1 个答案:

答案 0 :(得分:1)

如果您试图从“task1”中获取数字 1,请将其转换为 0001 并将其用作密钥的一部分,这不应该是您的 Web 应用程序的更多任务吗?首先生成它并将其插入到您的数据库中。

如果您尝试使用由两列组成的复合键,我只需将“userId”和“taskCount”设置为复合主键,我认为这是更好的解决方案。也许是这样的:

@ManyToOne(() => User, (user: User) => user.tasks, {primary: true})
@JoinColumn({ name: 'userId' })
public readonly user: User;   

@PrimaryColumn({type: "integer"})
public taskCount: number;