【TypeORM】save()関数がSELECTを発行する問題

【TypeORM】save()関数がSELECTを発行する問題

はじめに

コジマです。

TypeORMって便利な反面、微妙に小回り効かないんですよね。

save()関数を使うときにちょっとハマったことをメモメモ。

TypeORMのsave関数はentityのUPSERTを勝手にやってくれる便利君。
ただ困ったことがありまして。

UPSERT判定のためにSELECTを勝手に放出しちゃうんですね。
大人数が使うシステムだとこのSELECTが原因でテーブルロック引き起こして障害になったりして大変なのです。

How to update without select? #5258
2021/11/11現在でOPEN中。。。

データベース単位、もしくはトランザクション単位でdirty_readするようなロックレベルにしている人は問題ないと思いますが、
クエリ単位で制御している人にとっては気を付けたいところ。

現在は自力でupdate関数とinsert関数に分けるしかないですね。

さいごに

save()関数実行時のSELECTの実行有無とSELECTのロックレベルがオプションでできるようになるといいですね…!
便利なものとはうまく付き合っていかなければいけませんね。

もっと学びたい人はこちら

SQLをもっと学びたいエンジニアのためにおすすめのUdemy講座を紹介いたします!

SQLはじめましての人!まずあなたの3時間をください。
この講座でまずこれだけは覚えてくれ!という内容をしっかり押さえることができます。
SQLはプログラミング言語がなんであれ、システム開発に必要になります。
この講座を見て最低限必要な知識を身に着けて実践で貢献できるようになりましょう!
3時間で学ぶ SQL ・データベース 超入門【丁寧な解説+演習問題で SQL データ抽出の基本が身につく】標準 SQL

データベースの設計について学べる講座です。
設計について学べる教材は少ないので、実務でデータベースを触る人にはとてもうれしい講座です。
データベース講座1:データベース論理設計

ちょっとニッチに感じるかもしれませんが、SQLのインデックスを学ぶことができる講座です。
よい性能でSQLを運用するためにはインデックスの理解は必要不可欠です。
CRUD書いて満足するエンジニアを出し抜きましょう。
SQLServerのインデックスを理解して検索を速くする方法

気になった人はぜひ見てみてくださいね!

この記事を面白いまたは役に立ったと思ってくれた方は是非私のTwitter(@kojimanotech)を
フォローしてくれたらうれしいです!

以上、コジマでした。


データベースカテゴリの最新記事