엔티티 디렉토리가 구성 파일에 설정되지 않은 경우 ORM 유형이 엔티티를 찾을 수 없음
다음 구성 파일과 함께 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이 이러한 엔티티를 찾을 수 있도록 하려면 어떻게 해야 합니까?
당신이 설명한 가장 일반적인 경우는 분리된 것입니다.entities
엔티티 선언으로만 구성된 디렉터리입니다.
{
...
"entities": ["src/bar/entities/**/*.ts"]
}
또 다른 접근 방식은 각 엔티티를 개별적으로 가져오는 것입니다.
import {User} from "./payment/entity/User";
import {Post} from "./blog/entity/Post";
{
...
"entities": [User, Post]
}
나에게 그것은 또한 포함하는 데 도움이 되었습니다.src
로의 디렉토리.ormconfig.json
:
"entities": [
"dist/**/*.entity{.ts,.js}",
"src/**/*.entity{.ts,.js}"
],
나에게 대답은 { ... entities: [join(__dirname, '/../**/**.entity{.ts,.js}')], }
여기서 예제를 찾았습니다. https://github.com/nestjs/nest/blob/master/sample/05-sql-typeorm/src/app.module.ts
모든 엔티티를 동일한 위치에 배치하지 않으려는 경우(모듈 폴더가 있고 연결된 모듈 폴더에 엔티티를 배치하려는 경우) 및 다음과 같은 파일 명명 규칙을 사용하는 경우foo.entity.ts
,foo.service.ts
그런 다음 다음 다음을 수행할 수 있습니다. 그러면 소스 트리에 있는 모든 엔티티를 찾을 수 있습니다.
{
...
"entities": ["src/**/*{.entity.ts}"],
}
개발 및 운영 환경 모두에서 작업하기 위해 Nest.js를 사용하여 다음과 같이 작업해야 했습니다.
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';
}
문제는 사용자 엔티티 파일이 소문자로 되어 있다는 것입니다. 대문자로 표시했을 때 모두 작동했습니다.
이것은 나에게 효과가 있습니다.
entities: [
path.join(
__dirname,
process.env.NODE_ENV === 'development' ?
'/**/*.entity{.ts,.js}' :
'/**/*.entity.js', // afaik building stuffs are js-only
),
]
/../**/*.entity.{ts,js}
저한테는 효과가 있어요.기본적으로, 멀리서, 그것은 실체를 찾는 것입니다.하지만 내가 준 구성에서, 그것이 작동하지 않는 이유입니다. 당신이 ts와 js 확장자를 모두 추가했는지 확인하세요.
둥지를 이용하기 위해서입니다.JS 모듈화, 자동 로드 엔티티 기능을 사용할 수 있습니다.
이러한 방식으로 엔티티를 해당 모듈 폴더 내에 배치하여 관심사 분리를 유지할 수 있습니다.
활성화하려면 다음을 설정해야 합니다.autoloadEntities: true
형식 구성 개체의 속성입니다.
그냥 하기:
//app.module.ts
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
@Module({
imports: [
TypeOrmModule.forRoot({
...
autoLoadEntities: true,
}),
],
})
export class AppModule {}
그런 다음 모듈 엔티티는 다음을 통해 등록되어야 합니다.forFeature()
.
//user.module.ts
@Module({
imports: [
/* Here, User and ForgotPasswordToken entities are being registered */
TypeOrmModule.forFeature([User, ForgotPasswordToken])
],
providers: [UsersService],
controllers: [UsersController],
})
export class UsersModule {}
다음을 통해 등록되지 않은 엔티티forFeature()
메서드는 포함되지 않습니다.
자세한 내용은 NestJS 설명서를 참조하십시오.
엔티티 파일의 이름이 여러 개가 아닌지 확인합니다.예를 들어, 포스트 엔터티 파일을 만드는 경우 "posts.entity.ts"가 아니라 "post.entity.ts"가 되어야 합니다.
언급URL : https://stackoverflow.com/questions/52155315/typeorm-cannot-find-entities-if-entity-directory-was-not-set-in-configuration-fi
'IT' 카테고리의 다른 글
MSAL(Microsoft Authentication Library for js)을 텍스트 대응 단일 페이지 응용 프로그램으로 올바르게 가져오고 사용하는 방법은 무엇입니까? (0) | 2023.06.17 |
---|---|
유형 스크립트에서 중첩된 선택 <> 유형을 수행할 방법이 있습니까? (0) | 2023.06.17 |
숨겨진 입력이 true/false가 아닌 value="value"인 이유는 무엇입니까? (0) | 2023.06.12 |
두 단어 문자열에서 두 단어의 첫 번째 문자 대문자화 (0) | 2023.06.12 |
ggplot2에서 축 제목 및 레이블 크기 변경 (0) | 2023.06.12 |