我需要创建一个复合主键。我有两个实体,分别是用户和任务。
用户实体
@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
答案 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;