sql—如何创建包含多个字段的唯一索引,其中一个字段是外键

e37o9pze  于 2021-08-09  发布在  Java
关注(0)|答案(1)|浏览(396)

我正在尝试创建一个包含多个字段的索引,其中一个字段是另一个表的外键。但是,我得到以下错误:
错误:索引“player\u id\u unique”包含实体(learning):player\u id中缺少的列
考虑到球员的身份证是我加入的外国钥匙,我该怎么处理

import { Column, Entity, Index, JoinColumn, ManyToOne, PrimaryColumn } from "typeorm";
import { PersonPlayer } from "./PersonPlayer";
import { Team } from "./Team";

    @Entity()
    @Index("player_id_UNIQUE", ["player_id", "period", "year"], { unique: true })
    export class Earning {

        @PrimaryColumn({length: 36})
        id: string;

        @Column({nullable: true})
        year: number;

        @Column({type: 'decimal', nullable: true})
        amount: number;

        @Column({nullable: true, length: 45})
        period: string;

        @ManyToOne(() => Team, {nullable: true})
        @JoinColumn({name: 'team_id'})
        team: Team;

        @ManyToOne(() => PersonPlayer, {nullable: true})
        @JoinColumn({name: 'player_id'})
        player: PersonPlayer;

        @Column({nullable: true, length: 45})
        dtype: string;

    }

当我生成这个实体并创建sql表(没有索引)时,我看到 player_id 作为一列。但typeorm现在似乎无法通过joincolumn关系通过索引识别实体中存在player\ id。

nzkunb0c

nzkunb0c1#

这是完全没有文件,所以它采取了一些玩,直到我偶然发现正确的语法。实际上,可以在索引定义中使用子特性:

@Index("player_id_UNIQUE", ["player.id", "period", "year"], { unique: true })

那样的话, player.id 自动Map到 player_id 在生成的sql中:

CREATE UNIQUE INDEX "player_id_UNIQUE" ON "user_earning" ("player_id", "period", "year")

相关问题