Fix for EntityMetadataNotFound: No metadata was found in typeorm

In the NestJS application, Created a Custom Entity and corresponding Controller, Service, and started an application, got the below error during startup.

EntityMetadataNotFound: No metadata for “entity” was found:

Let’s see how to fix this error.

Solution for EntityMetadataNotFound: No metadata for was found

The entity is a Typescript class that maps to a table in the database.

If you defined the entities with typeorm decorator for your project, This error occurs while loading all entities which pointed to the incorrect directory with ts files.

NestJS expects the entities from the output directory of Js files. Please make sure that provide an entities path with .js and .ts files Listed all possible fixes.

  • First-way, Make sure that your typescript entity classes should have a @Entity() decorator.

For example, the employee class contains all fields Class must be added with @Entity() decorator

import { Entity, Column, PrimaryGeneratedColumn } from "typeorm";

@Entity()
export class Employee {
  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  firstName: string;

  @Column()
  lastName: string;

  @Column()
  email: string;

  @Column()
  phone: string;

  @Column()
  salary: number;

  @Column()
  isactive: boolean;
}

Second-way, Make sure that you are providing an entities value with a path to entities to TypeOrmModule.forRoot().

Example The below code contains entities attribute values pointed to all entity files in the directory. You can also define single entity names like entities:[entity]

@Module({
    imports: [
      TypeOrmModule.forRoot({
       entities: [__dirname + '/../**/*.entity.{js,ts}']
      }),
      ...
    ],
})

In case, If you are using ormconfig.js file

import { DataSourceOptions } from "typeorm";

const config: DataSourceOptions = {
  type: "mysql",
  host: "localhost",
  port: 3306,
  username: "root",
  password: "",
  database: "test",
  entities: ["/**/*.entity{.ts,.js}"],
  synchronize: true,
};
export default config;

the third way, enable autoLoadEntities to be true in the configuration object as given below

@Module({
    imports: [
      TypeOrmModule.forRoot({
         autoLoadEntities: true
      }),
      ...
    ],
})