我们有两个实体:EstateIntegrationEntity和EstateEntity
当我们尝试在estateIntegrationRepository上使用.findOne时,我们得到以下错误:
[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关系。
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的关系:
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()上
async findEstateById(id: string): Promise<EstateIntegrationEntity> {
return await this.estateIntegrationRepository.findOne({
where: {
external_id: id
}
});
}发布于 2020-12-03 18:22:38
您可以更改字段的名称。我刚刚遇到了一个类似的错误,并用@Column({ name:'name_the_fields_with_different_name‘})修改了它。因为问题是,如果在表中具有相同的名称,则find必须具有相同名称的to字段。
发布于 2020-12-10 17:08:28
对于这种情况,您有3种解决方案:
1-将列名从'estate_id‘更改为其他名称,如'id_estate’
2-使用TypeORM编写自定义连接语句
3-我最喜欢的解决方案是使用这样的命名策略:
install npm i --save typeorm-naming-strategies,然后在您的typeorm配置文件中输入const SnakeNamingStrategy = require('typeorm-naming-strategies')
.SnakeNamingStrategy;
module.exports = {
name: 'name',
type: 'mysql',
host: 'localhost',
port: 3306,
...
namingStrategy: new SnakeNamingStrategy(),
}https://stackoverflow.com/questions/64150437
复制相似问题