【问题标题】:Having unnecessary leftJoin in TypeORM query在 TypeORM 查询中有不必要的 leftJoin
【发布时间】:2021-11-29 09:28:21
【问题描述】:

我有两个实体,

@Entity('forms')
export class Form {
  // Form values
  // We set eager to true so that the values are loaded when we do an upsert
  @OneToMany('FormValueText', 'form', { eager: true, cascade: true })
  textValues: FormValueText[];
 
  @Column({ type: 'smallint' })
  @Field()
  version: number;

  @Column({ type: 'text' })
  @Field()
  projectID: string;
}


@Entity('formValuesText')
export class FormValueText {
  @ManyToOne('Form', 'textValues')
  @JoinColumn({ name: 'formID' })
  form: Form

  @Column({ type: 'varchar' })
  @Field()
  value: string;
}

当我尝试从第一个实体(表单)的服务中查询时

repo.find({
      select: ['version'],
      where: { projectID },
    });

查询包括带有 formValuesText 的 LEFT JOIN

SELECT
    "Form"."version" AS "Form_version", "Form"."id" AS "Form_id"
FROM
    "forms" "Form"
    LEFT JOIN "formValuesText" "Form_textValues" ON "Form_textValues"."formID" = "Form"."id"
WHERE ("Form"."projectID" = $1)
AND("Form"."deletedAt" IS NULL)

期待

SELECT
    "Form"."version" AS "Form_version", "Form"."id" AS "Form_id"
FROM
    "forms" "Form"
WHERE ("Form"."projectID" = $1)
AND("Form"."deletedAt" IS NULL)

有没有办法在查询中不使用 LEFT JOIN?

【问题讨论】:

  • 根据定义:“每次从数据库加载实体时,都会自动加载急切关系。”

标签: nestjs typeorm


【解决方案1】:

查询有LEFT JOIN的原因是因为eager: true在Form Entity中。

就我而言,在我不想使用 LEFT JOIN 的地方,我应该使用禁用急切关系的 QueryBuilder。

参考:https://orkhan.gitbook.io/typeorm/docs/eager-and-lazy-relations

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-08
    • 1970-01-01
    相关资源
    最近更新 更多