bounty将在1小时后过期。回答此问题可获得+100声望奖励。Kay正在寻找来自信誉良好的来源的答案。
使用typeorm如何设置复合/多列主键的顺序。
我期望/希望下面的实体生成
PRIMARY KEY (`date`,`id`),
但我却得到了
PRIMARY KEY (`id`,`date`),
实体
import { Entity, PrimaryGeneratedColumn, Column, Index } from "typeorm";
import { CreateDateColumn, UpdateDateColumn, DeleteDateColumn } from "../decorators/timestamps";
@Entity()
@Index("indx_popularity", ["date", "score", "entity_type"], { unique: false })
@Index("indx_id", ["id"], { unique: true })
export class EntityScore {
@PrimaryGeneratedColumn()
id: number;
@Column({ length: 36 })
entity_id: string;
@Column({ length: 36 })
entity_type: string;
@Column({ type: "decimal", precision: 4, scale: 3 })
score: number;
@Column({ type: "json", nullable: true })
raw: {};
@Column({ primary: true, type: "date" })
date: Date;
@CreateDateColumn({})
created_at: string;
@UpdateDateColumn({})
updated_at: string;
@DeleteDateColumn({})
deleted_at: string;
}
注意:在创建迁移文件后手动修改它不是一个可接受的解决方案。我正在寻找一个涉及更新实体定义本身的解决方案。只是因为我们无法跟踪这些手动更改,并且我们有一个用例,在进行本地开发时,我们使用synchronise=true,而不使用迁移文件。
1条答案
按热度按时间xtfmy6hx1#
在TypeORM中,组合主键中列的顺序由实体中定义列的顺序决定。要实现所需的主键顺序(
date
,id
),可以像这样重新排列实体中的列:通过将
date
列定义移到id
列定义之前,并保持两列都标记为primary,TypeORM将按照所需的顺序生成主键约束:PRIMARY KEY (date, id)
.