NodeJS 如何使用typeorm定义复合/多列主键的顺序

qxgroojn  于 2023-04-05  发布在  Node.js
关注(0)|答案(1)|浏览(323)

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,而不使用迁移文件。

xtfmy6hx

xtfmy6hx1#

在TypeORM中,组合主键中列的顺序由实体中定义列的顺序决定。要实现所需的主键顺序(dateid),可以像这样重新排列实体中的列:

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 {
    @Column({ primary: true, type: "date" })
    date: Date;

    @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: {};

    @CreateDateColumn({})
    created_at: string;

    @UpdateDateColumn({})
    updated_at: string;

    @DeleteDateColumn({})
    deleted_at: string;
}

通过将date列定义移到id列定义之前,并保持两列都标记为primary,TypeORM将按照所需的顺序生成主键约束:PRIMARY KEY (date, id) .

相关问题