TypeORM渴望在afterInsert和afterUpdate中建立关系

问题描述

在TypeORM中,我有一个订阅者(实现EntitySubscriberInterface的类),该订阅者侦听afterInsertafterUpdate事件。这是重现我的问题的最小实体:

@Entity()
export class MainEntity {
  @ManyToOne(type => Target,{ eager: true })
  @JoinColumn({ name: 'targetId' })
  target: Target;
  @Column()
  targetId: string;
}

使用mainEntity.find()时,渴望的关系有效(加载),但是如果我使用:

   mainEntity.save({targetId: 'valid_id'}).then((result) => console.log(result))

.target回调或then()事件侦听器中,afterInsert()的关系都无法解析。 targetId字段具有正确的值,但是target未定义。

是否有一种方法可以告诉.save()加载渴望的关系,或者我是否需要使用其ID从数据库中获取实体以获取它们?

我还尝试使用insert()而不是save(),以防万一save()出了问题。

谢谢!

解决方法

这对我有用:

  async afterInsert(event: InsertEvent<any>) {
    // User.role eager relation
    let entity: User = event.entity;
    entity = await event.manager.getRepository(User).findOne(entity.id);
    const role: Role = entity.role;
  }

或仅使用 event.manager(不使用 getRepository,但不知道导致此问题的区别是什么)。

如果使用管理器,需要再次保存实体,然后再取回。 否则 event.manager.findOne(entity.id); 会抛出错误。

  async afterInsert(event: InsertEvent<any>) {
    let entity: User = event.entity;
    await event.manager.save(entity);
    entity = await event.manager.findOne(entity.id);
    const role: Role = entity.role;
  }

来自 this answer 的参考和评论中的 github 问题链接。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...