如果未在配置文件中设置实体目录,则TypeORM无法找到实体

时间:2018-09-03 19:25:20

标签: javascript typescript typeorm

我将TypeORM与休闲配置文件一起使用:ormconfig.json

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

“我的实体”文件存储在./src/bar/entity目录中。 我总是收到以下错误:

  

RepositoryNotFoundError:找不到“ myTable”的存储库。看起来该实体未在当前的“默认”连接中注册?

当我手动将目录添加到配置文件时,找到了实体:

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

我的实体的定义如下:

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

如何允许TypeORM查找那些实体而无需在每个目录的配置文件中手动设置?

6 个答案:

答案 0 :(得分:6)

您描述的最常见的情况是有一个单独的entities目录,该目录仅包含实体声明。

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

另一种方法是分别导入每个实体:

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

{
...
"entities": [User, Post]
}

答案 1 :(得分:3)

为了在开发环境和生产环境中工作,我必须这样做:

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';
}

答案 2 :(得分:2)

如果您不想将所有实体放在同一位置(即,如果您有模块文件夹,并且想要将实体放置在其关联的模块文件夹中),并且您使用的是{{1}之类的文件命名约定, },foo.entity.ts等,您可以执行以下操作,它将在源代码树中的任何位置找到所有实体:

foo.service.ts

答案 3 :(得分:2)

对我来说,这有助于将src目录也包含到ormconfig.json

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

答案 4 :(得分:0)

对我来说,答案是 { ... entities: [join(__dirname, '/../**/**.entity{.ts,.js}')], }

我在这里找到了例子 https://github.com/nestjs/nest/blob/master/sample/05-sql-typeorm/src/app.module.ts

答案 5 :(得分:-1)

确保实体文件的名称不为复数。例如,如果您要创建帖子实体文件,则该文件不应为“ posts.entity.ts”,而应为“ post.entity.ts”