可以使用部分实体与typeorm保存吗?

时间:2020-02-17 23:39:42

标签: typescript typeorm typeorm-datamapper

所以我有这个表结构

--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。

1 个答案:

答案 0 :(得分:1)

有两种选择:

  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;
}
  1. 使用强制施放技巧
const order = { id: 1234 } as Order;
repo.save( new OrderEventEntity({ order: order, ... })