web-dev-qa-db-fra.com

TypeORM ne peut pas trouver d'entités si le répertoire d'entités n'a pas été défini dans les fichiers de configuration

J'utilise TypeORM avec le fichier de configuration en jachère: ormconfig.json

{
"type": "mysql",
"Host": "localhost",
"port": 3306,
"username": "root",
"password": "my-secret-pw",
"database": "mytestdb",
}

Mes fichiers d'entités sont stockés dans le répertoire ./src/bar/entity. J'obtiens toujours l'erreur suivante:

RepositoryNotFoundError: Aucun référentiel pour "myTable" n'a été trouvé. On dirait que cette entité n'est pas enregistrée dans la connexion "par défaut" actuelle?

L'entité est trouvée lorsque j'ajoute manuellement le répertoire au fichier de configuration:

{
...
"entities": ["src/bar/entity/**/*.ts"]
}

Mon entité est définie comme:

@Entity('myTable')
export default class MyTable {
    @PrimaryGeneratedColumn()
    public id: number;
    ...

Comment puis-je permettre à TypeORM de trouver ces entités sans les définir manuellement dans le fichier de configuration de chaque répertoire?

10
Daniel Santos

Le cas le plus courant que vous avez décrit est d'avoir un répertoire entities séparé qui se compose uniquement de déclarations d'entité.

{
...
"entities": ["src/bar/entities/**/*.ts"]
}

Une autre approche consisterait à importer chaque entité séparément:

import {User} from "./payment/entity/User";
import {Post} from "./blog/entity/Post";

{
...
"entities": [User, Post]
}
17
Risto Novik

Pour moi, la réponse était { ... entities: [join(__dirname, '/../**/**.entity{.ts,.js}')], }

J'ai trouvé l'exemple ici https://github.com/nestjs/nest/blob/master/sample/05-sql-typeorm/src/app.module.ts

4
Victor

Si vous ne souhaitez pas placer toutes les entités au même endroit (c'est-à-dire si vous avez des dossiers de modules et souhaitez placer des entités dans leurs dossiers de modules associés), et si vous utilisez une convention de dénomination de fichier comme foo.entity.ts, foo.service.ts, etc. alors vous pouvez faire ce qui suit et il trouvera toutes les entités où qu'elles se trouvent dans votre arbre source:

{
  ...
  "entities": ["src/**/*{.entity.ts}"],
}
2
ryan0

Pour moi, cela a aidé à inclure également le répertoire src dans ormconfig.json:

  "entities": [
    "dist/**/*.entity{.ts,.js}",
    "src/**/*.entity{.ts,.js}"
  ],
2
michal.jakubeczy

Afin de travailler à la fois pour le développement et l'environnement de production, j'ai dû faire comme ceci:

entities: [
   this.isProduction() ? 
       path.join(__dirname, '../**/**.entity{.ts,.js}') : '**/*.entity{.ts,.js}',
],

// ....

private isProduction(): boolean {
    const mode = this.configService.get('NODE_ENV');
    return mode !== 'development';
}
0
renatogbp