Отношения многие ко многим не отображаются в базе данных. - PullRequest
0 голосов
/ 23 марта 2020

Доброе утро!

Вот мой код, проблема написана чуть ниже кода Это отношение многие ко многим, где пользователь может подписаться на элемент

user.entity.ts

@Entity("user")
export class UserEntity {

    @PrimaryGeneratedColumn('uuid')
    id: string;

    @Column({
        type: 'varchar',
        length: 50,
        unique: true,
    })
    username: string;

    @Column('text')
    password: string;

    @Column('text')
    role: string;

    @OneToMany(type => SubscriptionEntity, subscriptionEntity => subscriptionEntity.user)
    subscription: SubscriptionEntity[];
}

item.entity.ts

@Entity("item")
export class ItemEntity {

    constructor() {}

    @PrimaryGeneratedColumn() id: number;

    @Column('text') name: string;

    @Column('text') description: string;

    @Column('decimal') price: number;

    @Column('text') picture: string;

    @OneToMany(type => SubscriptionEntity, subscriptionEntity => subscriptionEntity.item)
    subscription: SubscriptionEntity[];
}

subscription.entity.ts

@Entity("subscription")
export class SubscriptionEntity {

    @PrimaryColumn() userId: string;
    @PrimaryColumn() itemId: number;

    @ManyToOne(type => UserEntity, user => user.subscription)
    @JoinColumn({name: "userId"})
    user: UserEntity;

    @ManyToOne(type => ItemEntity, item => item.subscription)
    @JoinColumn({name: "itemId"})
    item : ItemEntity;
}

Проблема в том, что мои отношения / внешние ключи не отображаются в моей базе данных:

desc subscription

+--------+--------------+------+-----+---------+-------+
| Field  | Type         | Null | Key | Default | Extra |
+--------+--------------+------+-----+---------+-------+
| userId | varchar(255) | NO   | PRI | NULL    |       |
| itemId | int(11)      | NO   | PRI | NULL    |       |
+--------+--------------+------+-----+---------+-------+

Я действительно не вижу проблемы там. Я пристально следил за этим LINK , и в нижней части вы можете увидеть почти тот же код.

1 Ответ

1 голос
/ 23 марта 2020

Если вы хотите, чтобы userId и itemId были внешними ключами для их таблиц (User и Item соответственно), вы не должны определять их как первичные ключи. На SubscriptionEntity просто используйте автоматически сгенерированный идентификатор в качестве первичного ключа.

Однако, если вы хотите принудительно установить единственную подписку на элемент для пользователя, вы можете использовать Уникальное ограничение , например: : @Unique(["user", "item"])

...