TypeORMでDataSourceを利用したら、「EntityMetadataNotFoundError」エラーになった。
結論:ちゃんとinitializeしてるよね?
エラー対処にちょっと手間取ったので、共有です。
経緯
去年ぐらいに作ったProjectを大きく作り直していた時のことです。
typeormが少し古いバージョン(0.2.x)を使っていたので、0.3.xにアップデートしました。
その際、せっかくならばとDataSource APIに乗り換えました。
- Connection
const connection = await createConnection({
type: "mysql",
host: "localhost",
entities: [Hoge, Fuga],
// ...
});
- DataSource
const AppDataSource = new DataSource({
type: "mysql",
host: "localhost",
entities: [Hoge, Fuga],
// ...
})
エラー
jest+typeormでテストを組んでいたら、以下の様なエラーになりました。
EntityMetadataNotFoundError: No metadata for "Hoge" was found.
「あれーEntityの指定方法が変わって、Entityクラス直指定じゃダメなのかな。。。」等々、考えながら検索しても、entitiesでディレクトリをどう指定すればよいかみたいな話しか出てきませんでした。
解決策
initializeしてください。それだけです。。。
const AppDataSource = new DataSource({
// ...
});
await AppDataSource.initialize();
いや、そりゃそうだよね。。。createConnectionの時はそれ自体が初期化だったので、抜けてました。エラーメッセージもうちょっと分かりやすくしてくれないかなぁ~
公式ドキュメントにもちゃんと書いてあるので、読みましょう。
参考:package.json
"dependencies": {
"mysql": "^2.18.1",
"reflect-metadata": "^0.1.13",
"typeorm": "^0.3.9"
}