繁体   English   中英

TypeORM 关系只返回 id

[英]TypeORM relation only gives back ids

我是 TypeORM 的新手,所以这可能是一个简单的问题,但我已经创建了两个具有 OneToMany 和 ManyToOne 关系的实体,如下所示:

@Entity('user')
export class UserEntity {
  // I left out other fields
  @OneToMany(
    () => ConfigurationEntity,
    (configuration) => configuration.createdBy,
    { nullable: true, cascade: true, eager: true },
  )
  createdConfigurations?: ConfigurationEntity[];
}
@Entity('configurations')
export class ConfigurationEntity {
  @ManyToOne(() => UserEntity, (user) => user.createdConfigurations)
  createdBy: UserEntity;
}

创建配置时,我通过将 ConfigurationEntity 添加到 UserEntity 来保存它,然后像这样保存 UserEntity:

async createConfiguration(configurationDto: ConfigurationDto, userEntity: UserEntity) {
    let configurationEntity = new ConfigurationEntity();
    configurationEntity.createdBy = userEntity;

    // here I set some other values of my configurationEntity which I left out
    // ....

    if (!userEntity.createdConfigurations) {
      userEntity.createdConfigurations = [];
    }
    userEntity.createdConfigurations.push(configurationEntity);
    await this.userRepository.save(userEntity);

    configurationEntity.createdBy = undefined;
    return configurationEntity;
  }

一切似乎都很好,当我保存它时,它实际上保存得很好。 我遇到的问题是,当我尝试查找用户并查看 createdConfigurations 时,我只有一个配置 ID 的列表。 我想查看完整的 ConfigurationEntity(由于循环引用而没有 createdBy)。 我怎样才能做到这一点?

实际的:

{
  id: 1,
  createdConfigurations: [ { id: 3 }, { id: 4 } ]
}

预期的:

{
  id: 1,
  createdConfigurations: [ { id: 3, brand: 'Mercedes', ... }, { id: 4, brand: 'Kia', ... } ]
}

我发现了问题所在。 这与急切的选择有关。 我的配置实体如下所示:

@Entity('configurations')
export class ConfigurationEntity {
  @PrimaryGeneratedColumn()
  id: number;

  @OneToOne(() => ConfigurationBasicInfoEntity, { cascade: true })
  @JoinColumn()
  basicInfo: ConfigurationBasicInfoEntity;

  @OneToOne(() => ConfigurationColorUpholsteryEntity, {
    cascade: true,
  })
  @JoinColumn()
  colorUpholsteryInfo: ConfigurationColorUpholsteryEntity;

  @OneToOne(() => ConfigurationFinanceEntity, { cascade: true })
  @JoinColumn()
  financeInfo: ConfigurationFinanceEntity;

  @OneToOne(() => ConfigurationContactEntity, { cascade: true })
  @JoinColumn()
  contactInfo: ConfigurationContactEntity;

  @ManyToOne(() => UserEntity, (user) => user.createdConfigurations)
  createdBy: UserEntity;
}

我必须在我的实体的选项中添加 eager: true 才能像这样加载它们:

@Entity('configurations')
export class ConfigurationEntity {
  @PrimaryGeneratedColumn()
  id: number;

  @OneToOne(() => ConfigurationBasicInfoEntity, { cascade: true, eager: true })
  @JoinColumn()
  basicInfo: ConfigurationBasicInfoEntity;

  @OneToOne(() => ConfigurationColorUpholsteryEntity, {
    cascade: true,
    eager: true,
  })
  @JoinColumn()
  colorUpholsteryInfo: ConfigurationColorUpholsteryEntity;

  @OneToOne(() => ConfigurationFinanceEntity, { cascade: true, eager: true })
  @JoinColumn()
  financeInfo: ConfigurationFinanceEntity;

  @OneToOne(() => ConfigurationContactEntity, { cascade: true, eager: true })
  @JoinColumn()
  contactInfo: ConfigurationContactEntity;

  @ManyToOne(() => UserEntity, (user) => user.createdConfigurations)
  createdBy: UserEntity;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM