TypeORM createQueryBuilder where 语句不考虑实体列名称

TypeORM createQueryBuilder where statement not respecting Enitity column name

我有一个预先存在的数据库 table,其中有一列名称为 account_number,但是,我想在我的代码中将此列引用为 accountNumber

我有以下实体,我将 accountNumber 的 属性 类型的列名称设置为 account_number

import { ObjectType, Field } from 'type-graphql';
import { Entity, PrimaryGeneratedColumn, Column, BaseEntity } from 'typeorm';

@ObjectType()
@Entity({ database: 'main', name: 'account' })
class Account extends BaseEntity {
  @Field(() => String)
  @Column({ name: 'account_number' })
  @PrimaryGeneratedColumn()
  accountNumber!: string;

  @Field(() => String)
  @Column()
  organisation!: string;
}

export default Account;

这是我遇到问题的查询生成器

await AccountRepository
  .createQueryBuilder('a')
  .where('a.`account_number` = :accountNumber', { accountNumber: "abc123" })
  .getOne();

预期行为

使用 account_number 列解析的查询,如 Column 装饰器中所述。

SELECT `a`.`account_number` AS `a_accountNumber`, 
`a`.`organisation` AS `a_organisation` 
FROM `main`.`account` `a` 
WHERE a.`account_number` = 'abc123'

实际行为

但是,它似乎想使用 accountNumber 而不是 account_number,即使我在 Entity

中这样设置了它
SELECT `a`.`accountNumber` AS `a_accountNumber`, 
`a`.`organisation` AS `a_organisation` 
FROM `main`.`account` `a` 
WHERE a.`account_number` = 'abc123'

看起来你正在做与这个问题相同的事情:

Typeorm ignoring @column name of columns

我不清楚这是否记录在案,但我认为明确命名的 PrimaryColumn()PrimaryGeneratedColumn() 有问题。如果你绝对需要生成的列,你应该可以使用

@Column(name: 'account_number',
        // "serial" type is equivalent to AI in PG
        type: 'serial',
        primary: true)
accountNumber: string;

(从这里开始:https://github.com/typeorm/typeorm/issues/1517)。

此外,您不需要在主键上使用 !,它始终是必需的。