前提・実現したいこと
NestJS
(特にORM
)の学習をしようと思い、既存DBに対応するentity
(ソース中のHoge
のことです)を作成して接続を試みました。
ts
1// app.module.ts 2import { Module } from '@nestjs/common'; 3import { AppController } from './app.controller'; 4import { AppService } from './app.service'; 5import { ConfigModule } from '@nestjs/config' 6import { TypeOrmModule } from '@nestjs/typeorm'; 7import { Hoge } from './entities/Hoge'; 8 9@Module({ 10 imports: [ 11 ConfigModule.forRoot(), 12 TypeOrmModule.forRoot({ 13 type: 'mssql', 14 host: 'xxx.xxx.xxx.xxx', 15 port: 9999, 16 username: 'xxxxx', 17 password: 'xxxxx', 18 database: 'xxxxx', 19 entities: [ 20 Hoge 21 ], 22 synchronize: true, 23 migrationsRun: true, 24 options: { 25 encrypt: false 26 } 27 }) 28 ], 29 controllers: [AppController], 30 providers: [AppService], 31}) 32export class AppModule { }
取り急ぎnpm start
で起動したところ、下記のエラーが発生しました。
QueryFailedError: Error: There is already an object named 'hoge' in the database.
エラーにある通り、接続するテーブルには既にhoge
というテーブルがありますが、
そのテーブルに合わせてentity
を作成したのだから「そりゃそうだろ」と思ってしまいます。
環境
node
のバージョンはv16.5.0
で、導入しているモジュールのバージョンは以下の通りです(package.json/dependencies
より抜粋)。
"@nestjs/common": "^8.0.0", "@nestjs/config": "^1.0.1", "@nestjs/core": "^8.0.0", "@nestjs/platform-express": "^8.0.0", "@nestjs/typeorm": "^8.0.2", "firebase-admin": "^9.11.1", "mssql": "^7.2.1", "reflect-metadata": "^0.1.13", "rimraf": "^3.0.2", "rxjs": "^7.2.0", "typeorm": "^0.2.37"
疑問点
以下、質問になります。
- 自分の想定では 「
NestJS
のORM
は、既にあるテーブルに合わせてクラスを作っておくことで、シームレスにデータ操作ができるもの」 という理解だったのですが、そもそもこの認識が違うのでしょうか? - もし上記の想定が合っており、提示したソースになんらかの記載間違い(あるいは不足)がありましたらご教示いただきたく思います。理解して解決できないと学習の意味もないように思えるため、可能なら参考文献などの提示もいただければと思います。
※当該のエラーで検索をかけてもmigration
の処理をいじることで解決する例がほとんどで、これは「テーブル定義が変わった際の処理」であるため本件とはあまり関係ないのでは・・・?という理解でいます。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。