можно использовать частичную сущность для сохранения с помощью typeorm? - PullRequest
4 голосов
/ 18 февраля 2020

Итак, у меня есть эта структура таблицы

--changeset 0004-order:ccushing
create table if not exists "order"."order"
(
    id          uuid primary key                                          not null default uuid_generate_v4(),
    state       uuid references "order".order_status
);

--changeset 0004-h0-table-order_event_type:ccushing
create table if not exists "order".order_event_type
(
    id          uuid primary key                                          not null default uuid_generate_v4(),
    key         text unique                                               not null
);

--changeset 0004-h1-table-order_event:ccushing
create table if not exists "order".order_event
(
    id          uuid primary key                                          not null default uuid_generate_v4(),
    order_id    uuid                                                      not null references "order"."order" (id),
    event_type  uuid                                                      not null references "order".order_event_type (id),
    event       jsonb                                                     not null,
    unique (order_id, event),
    unique (order_id, event_type)
);

Я хочу создать новый OrderEventEntity, но я не хочу загружать Order при этом, так как я просто получаю order_id в событии.

@Entity('order.order_event')
export default class OrderEventEntity implements Identifiable<string> {
  @PrimaryGeneratedColumn({ type: 'uuid' })
  readonly id!: string;

  @ManyToOne(() => OrderEventTypeEntity, ({ event }) => event)
  readonly eventType!: string;

  @ManyToOne(() => OrderEntity, ({ events }) => events)
  readonly order!: OrderEntity;
}

Могу ли я сделать

const order = new Order({ id: 1234 })
repo.save( new OrderEventEntity({ order: order, ... })

или подобное (возможно, некоторую частичную загрузку) без потери OneToMany? но все еще только с идентификатором заказа.

1 Ответ

1 голос
/ 25 февраля 2020

Есть два варианта:

  1. Определить order_id столбец в вашем OrderEventEntity
@Entity('order.order_event')
export default class OrderEventEntity implements Identifiable<string> {
  @PrimaryGeneratedColumn({ type: 'uuid' })
  readonly id!: string;

  @ManyToOne(() => OrderEventTypeEntity, ({ event }) => event)
  readonly eventType!: string;

  @Column()
  order_id: string;

  @ManyToOne(() => OrderEntity, ({ events }) => events)
  readonly order!: OrderEntity;
}
Использовать сложное заклинание
const order = { id: 1234 } as Order;
repo.save( new OrderEventEntity({ order: order, ... })
...