如何序列化和反序列化对象,使其在Typeorm中保持其类名

时间:2018-11-24 20:28:04

标签: postgresql typescript event-sourcing nestjs typeorm

我是事件外包的初学者,并且将NestJS与Typeorm结合使用。我正在使用'@ nestjs / cqrs'库中的AggregateRoot。该库在应用事件时需要事件的构造函数名称。

无论如何,我认为我的问题与Typeorm有关。我不知道如何指定postgres json反序列化的方式。

我使用以下模型将事件持久保存在PostgreSQL数据库中

log.com.jcabi.ssh.Ssh=info

我的事件存储在这里:

@Entity()
export class Event {
  @PrimaryGeneratedColumn('uuid')
  id: string;

  @Column()
  aggregateId: number;

  @Column('json')
  payload: object;

  @Column()
  className: string;
}

我的问题:我需要从数据库中检索我的handle(event: ArticleCreatedEvent) { const articleCreatedEvent = new Event(); articleCreatedEvent.payload = event; articleCreatedEvent.aggregateId = event.id; const { constructor } = Object.getPrototypeOf(event); articleCreatedEvent.className = constructor.name; this.EventRepository.save(articleCreatedEvent); return; } 。使用Typeorm的EventRepository进行操作时,我拥有事件的所有有效负载。但是,由于模型中有效负载的类型为ArticleCreatedEvent,构造函数名称为'object',而我的object根据构造函数名称处理事件,因此我希望它为'ArticleCreatedEvent' 。

我可以向Typeorm指定构造函数应该是ArticleCreatedEvent,然后传递有效载荷吗?如果不是,您是否知道一种在postgres中存储对象的方法,以保留对象的原型(例如,保留构造函数名称)?

谢谢!

0 个答案:

没有答案