首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL typeORM中的复合主键

问MySQL typeORM中的复合主键
EN

Stack Overflow用户
提问于 2020-10-20 14:01:27
回答 1查看 2.3K关注 0票数 5

我需要创建一个复合主键。我有两个实体: user和task。

用户实体

代码语言:javascript
复制
@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[];
}

任务实体

代码语言:javascript
复制
@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’。

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

代码语言:javascript
复制
id                      name    userId
4a00a3738e90e-0001      task1   4a00a3738e90e
4a00a3738e90e-0002      task2   4a00a3738e90e
1er04r35l56en-0001      task1   1er04r35l56en
EN

回答 1

Stack Overflow用户

发布于 2021-07-15 18:07:37

如果你试图从“task1”中获取数字1,将其转换为0001并将其作为你的key的一部分,这不应该是你的web应用程序的一个更重要的任务吗?首先生成它,然后将其插入到数据库中。

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

代码语言:javascript
复制
@ManyToOne(() => User, (user: User) => user.tasks, {primary: true})
@JoinColumn({ name: 'userId' })
public readonly user: User;   

@PrimaryColumn({type: "integer"})
public taskCount: number;    
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64439306

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档