質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
NestJS

NestJSは、Node.jsアプリケーションを構築するためのフレームワーク。Typescript製でAngularの影響を強く受けています。Expressで利用できるアーキテクチャをそのまま利用でき、保守が簡単なアプリケーションの構築が可能。開発を容易にするCLIも用意されています。

ORM

ORM(オブジェクト関係マッピング)はオブジェクト指向のシステムとリレーショナルデータベースの間でマッピングを行う技術です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

Q&A

解決済

1回答

1399閲覧

NestJSのORMで「テーブルが既に存在する」旨のエラーが出てしまう

nekoniki

総合スコア2411

NestJS

NestJSは、Node.jsアプリケーションを構築するためのフレームワーク。Typescript製でAngularの影響を強く受けています。Expressで利用できるアーキテクチャをそのまま利用でき、保守が簡単なアプリケーションの構築が可能。開発を容易にするCLIも用意されています。

ORM

ORM(オブジェクト関係マッピング)はオブジェクト指向のシステムとリレーショナルデータベースの間でマッピングを行う技術です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

0グッド

0クリップ

投稿2021/09/17 07:20

前提・実現したいこと

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"

疑問点

以下、質問になります。

  • 自分の想定では NestJSORMは、既にあるテーブルに合わせてクラスを作っておくことで、シームレスにデータ操作ができるもの」 という理解だったのですが、そもそもこの認識が違うのでしょうか?
  • もし上記の想定が合っており、提示したソースになんらかの記載間違い(あるいは不足)がありましたらご教示いただきたく思います。理解して解決できないと学習の意味もないように思えるため、可能なら参考文献などの提示もいただければと思います。

※当該のエラーで検索をかけてもmigrationの処理をいじることで解決する例がほとんどで、これは「テーブル定義が変わった際の処理」であるため本件とはあまり関係ないのでは・・・?という理解でいます。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

TypeOrmModule.forRootの引数のオブジェクトから、以下のプロパティをfalseにすることでエラーが解消しました。

  • synchronize
  • migrationsRun

投稿2021/09/21 01:26

nekoniki

総合スコア2411

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問