NestJS应用报错EntityMetadataNotFoundError:未找到Patient元数据
NestJS + TypeORM 报错:No metadata for "Patient" was found.
错误日志
[Nest] 12125 - 05/30/2023, 1:43:35 PM ERROR [ExceptionsHandler] No metadata for "Patient" was found. EntityMetadataNotFoundError: No metadata for "Patient" was found. at DataSource.getMetadata (/Users/rajveersingh/Desktop/parchaa/HIP/parchaa-hip/src/data-source/DataSource.ts:444:30) at Repository.get metadata [as metadata] (/Users/rajveersingh/Desktop/parchaa/HIP/parchaa-hip/src/repository/Repository.ts:53:40) at Repository.save (/Users/rajveersingh/Desktop/parchaa/HIP/parchaa-hip/src/repository/Repository.ts:206:18) at HiuConsentService.patientsFind (/Users/rajveersingh/Desktop/parchaa/HIP/parchaa-hip/src/hiu-consent/hiu-consent.service.ts:913:38) at HiuConsentController.patientsFind (/Users/rajveersingh/Desktop/parchaa/HIP/parchaa-hip/src/hiu-consent/hiu-consent.controller.ts:129:49) at /Users/rajveersingh/Desktop/parchaa/HIP/parchaa-hip/node_modules/@nestjs/core/router/router-execution-context.js:38:29 at processTicksAndRejections (node:internal/process/task_queues:95:5) at /Users/rajveersingh/Desktop/parchaa/HIP/parchaa-hip/node_modules/@nestjs/core/router/router-execution-context.js:46:28 at /Users/rajveersingh/Desktop/parchaa/HIP/parchaa-hip/node_modules/@nestjs/core/router/router-proxy.js:9:17
相关代码
hiu-consent.module.ts
import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; import { ConfigModule, ConfigService } from '@nestjs/config'; import { RefreshTokenModule } from 'src/refresh-token/refresh-token.module'; import { HiuConsentController } from './hiu-consent.controller'; import { HiuConsentService } from './hiu-consent.service'; import { ConsentRequest } from './entities/consentRequest.entity'; import { ConsentsOnFetch } from './entities/cosentOnFetch.entity'; import { FideliusService } from 'src/fidelius/fidelius.service'; import { CmRequest } from './entities/cmRequest.entity'; import { Patient } from './entities/patient.entity'; import { DecryptedData } from './entities/data.entity'; import { HiuNotify } from './entities/hiuNotify.entity'; @Module({ imports: [ RefreshTokenModule, TypeOrmModule.forRootAsync({ imports: [ ConfigModule.forRoot({ isGlobal: true, envFilePath: ".env", }), ], useFactory: (configService: ConfigService) => ({ type: 'postgres', host: configService.get('DB_HOST'), port: +configService.get<number>('DB_PORT'), username: configService.get('DB_USERNAME'), password: configService.get('DB_PASSWORD'), database: configService.get('DB_DATABASE'), synchronize: configService.get<boolean>('DB_SYNC'), entities: [ ConsentRequest, ConsentsOnFetch, CmRequest,Patient,DecryptedData, HiuNotify ] }), inject: [ConfigService], }), TypeOrmModule.forFeature([ConsentRequest, ConsentsOnFetch, CmRequest, Patient, DecryptedData, HiuNotify]), ], controllers: [HiuConsentController], providers: [HiuConsentService, FideliusService] }) export class HiuConsentModule {}
Patient 实体
import { Column, Entity, PrimaryGeneratedColumn } from "typeorm"; @Entity() export class Patient { @PrimaryGeneratedColumn() id: number; @Column({ default: 'abc'}) patientId: string; @Column({ default: 'abc'}) patientName: string; }
补充信息
- 已尝试使用
dist目录下的entity.js文件配置实体路径,问题未解决 - 两个原本独立运行正常的分支,将分支B合并到分支A后,分支B代码出现此错误,怀疑与
package-lock.json有关
解决方法
1. 检查实体导入路径与大小写
TypeORM对实体类名、文件名的大小写敏感,确保:
Patient实体的导入路径正确,文件名大小写与代码引用完全一致- 代码中所有调用
Patient的地方类名大小写统一
2. 清理编译产物并重新构建
分支合并后可能残留旧编译文件导致冲突:
rm -rf dist npm run build npm run start:prod
3. 统一TypeORM配置方式
避免在模块内重复配置数据库连接,建议将TypeOrmModule.forRootAsync抽离到全局模块(如app.module.ts),当前模块仅用TypeOrmModule.forFeature引入所需实体,减少重复配置的冲突风险。
4. 修复依赖版本冲突
分支合并后可能出现依赖版本不一致,尤其是@nestjs/typeorm与typeorm的版本:
- 删除旧依赖文件:
rm -rf node_modules package-lock.json
- 重新安装依赖:
npm install
- 确认
package.json中@nestjs/typeorm与typeorm版本兼容(可参考NestJS官方文档的版本对应表)
5. 验证实体元数据装饰器
确保Patient实体上的@Entity()装饰器正确导入自typeorm,无拼写错误或导入路径错误。
内容的提问来源于stack exchange,提问作者Rajveer -parchaa
相关产品推荐
相关产品推荐

