首页 > 解决方案 > 我可以使用部分实体来保存 typeorm 吗?

问题描述

所以我有这个表结构

--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?但仍然只有订单 ID。

标签: typescripttypeormtypeorm-datamapper

解决方案


有两种选择:

  1. 在您的定义order_idOrderEventEntity
@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;
}
  1. 使用强制施法技巧
const order = { id: 1234 } as Order;
repo.save( new OrderEventEntity({ order: order, ... })

推荐阅读