【问题标题】:Composite primary key in MySQL typeORMMySQL typeORM中的复合主键
【发布时间】:2021-07-15 18:07:37
【问题描述】:

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

用户实体

@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

【问题讨论】:

    标签: typeorm


    【解决方案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;    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-05
      • 1970-01-01
      • 2016-07-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多