首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Nestjs中具有TypeORM的重复列名称

问Nestjs中具有TypeORM的重复列名称
EN

Stack Overflow用户
提问于 2020-10-01 14:56:35
回答 2查看 1.3K关注 0票数 2

我们有两个实体:EstateIntegrationEntity和EstateEntity

当我们尝试在estateIntegrationRepository上使用.findOne时,我们得到以下错误:

代码语言:javascript
复制
[Nest] 5537   - 10/01/2020, 8:37:55 AM
[ExceptionsHandler] ER_DUP_FIELDNAME: Duplicate column name 'EstateIntegrationEntity_estate_id' +1590ms
QueryFailedError: ER_DUP_FIELDNAME: Duplicate column name 'EstateIntegrationEntity_estate_id'
    at ...

我们创建了一个从EstateIntegrationEntity到EstateEntity的OneToOne关系。

代码语言:javascript
复制
import { EstateEntity } from "src/estates/estate.entity";
import { Column, Entity, JoinColumn, OneToOne, PrimaryGeneratedColumn, RelationId } from "typeorm";

@Entity({ name: 'estate_integrations' })
export class EstateIntegrationEntity {
  @PrimaryGeneratedColumn()
  id: number;

  @RelationId((estateIntegrationEntity: EstateIntegrationEntity) => estateIntegrationEntity.estate)
  estate_id: number;

  @OneToOne(() => EstateEntity, { eager: true })
  @JoinColumn({ name: 'estate_id' })
  estate: EstateEntity;

  ...
}

以及从EstateEntity到EstateIntegrationEntity的关系:

代码语言:javascript
复制
import { EstateIntegrationEntity } from 'src/integrations/estate.integration.entity';
import { Column, Entity, JoinColumn, ManyToOne, OneToOne, PrimaryGeneratedColumn } from 'typeorm';

@Entity('estates')
export class EstateEntity {
  @PrimaryGeneratedColumn()
  id: number;

  @Column('varchar' || null)
  uuid: string;

  @OneToOne(
    () => EstateIntegrationEntity,
    estate_integration => estate_integration.estate,
  )
  estate_integration: EstateIntegrationEntity;
}

此错误仅发生在.findOne()上,而不会出现在.find()上

代码语言:javascript
复制
async findEstateById(id: string): Promise<EstateIntegrationEntity> {
  return await this.estateIntegrationRepository.findOne({
    where: {
      external_id: id
    }
  });
}
EN

回答 2

Stack Overflow用户

发布于 2020-12-03 18:22:38

您可以更改字段的名称。我刚刚遇到了一个类似的错误,并用@Column({ name:'name_the_fields_with_different_name‘})修改了它。因为问题是,如果在表中具有相同的名称,则find必须具有相同名称的to字段。

票数 1
EN

Stack Overflow用户

发布于 2020-12-10 17:08:28

对于这种情况,您有3种解决方案:

1-将列名从'estate_id‘更改为其他名称,如'id_estate’

2-使用TypeORM编写自定义连接语句

3-我最喜欢的解决方案是使用这样的命名策略:

  • 首先输入install npm i --save typeorm-naming-strategies,然后在您的typeorm配置文件中输入

代码语言:javascript
复制
const SnakeNamingStrategy = require('typeorm-naming-strategies')
  .SnakeNamingStrategy;
   module.exports = {
        name: 'name',
        type: 'mysql',
        host: 'localhost',
        port: 3306,
       ...
       namingStrategy: new SnakeNamingStrategy(),
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64150437

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档