アプリ開発

N+1問題でJPAを諦めるのはもったいない

更新日:

JPAを実案件で使ってみて。時間をかけて勉強することが必ず必要となる。

自分はいきなりJPAで組むことになった。最初はJPQL使わずにJPAPepositoryの標準メソッドだけでごまかしごまかしやっていたが、いろいろ絡み付いて苦しくなった。

だから、やはりJPAをしっかり勉強することが必要になった。勉強してから始めても良いが、どんな問題が出てくるかはやってみないと分からないと思う。

勉強を最初にするか後にするか、いずれにしても時間を割く必要は出てくる。必要工数である。それを割く価値がJPAにはある。

N+1問題

JPA使うと確実に直面する。私のプロジェクトは大丈夫だろうと思っていたが、すぐに出てきたら。関連エンティティの件数が50くらいですぐに重くなりはじめるよ。

JPAを使う以上、N+1問題は避けて通れないからね。

回避方法 Lazy,Eagerは回避方法ではない。後でN回やるか、先にN回やるかだけ。JOIN Fetchが回避方法。JPQLやqueryDSLでJOIN Fetchを指定すること。

@OneToManyは限られたシーンのみ。

Many側のEntityが有限数であるときしか使えない。

最初は親Entityを取得したらMany側の関連Entityもついてるなんて素敵!と思った。

でも、関連Entityがせいぜい10個くらいまでと決まってないと、何個ついてくるかわからない。50個もついてきたら重いです。

ってことで、結局関連Entityも別個でとってくることになった。あれれ?JPAのメリットが大きく削がれたような‥。
Entity→Modelパターン

Entityの構造がDBカラムになる。そこで、DBカラムの変更がUIに影響しないように(?)、EntityをModelにマッピングして(詰め替えて)、Modelを使うというレイヤー分けが採用されていた。

Entity→Modelのとき、Entityごとにマッピング用のクラスを作るのはアホらしい。

まずはBeanUtils#copyを使うことにした。すると、シャローコピーといって、Entity直下のフィールドしかコピーしてくれない。これは、関連EntityをもつEntityのコピー時には役に立たないことを意味する。

関連Entityもコピーしてくれるようなライブラリである、ModelMapperを採用した。(リーダーが使っていたから)

すると、関連Entityをコピーするときに、ものすごい数のJPAが発生した。重たくて実用レベルではない。

レスポンスが遅いUIを更改しようとしているのに、さらにレスポンスが遅くなってしまうところだった。

【転職のプロが薦める】Web系自社開発のための転職エージェントランキング!

 転職満足度は『「いかに自分の希望にあう、条件のよい」企業から内定が出たか』で決まります。そのため、Web系企業に転職するときのエージェントを選ぶポイントは、「Web系企業の求人」をいくつ持っているかに尽きます。なので、総合大手よりも、Web系企業の求人を多くもつIT専門転職エージェントがオススメです。

ギークリー

  • Web系企業の求人数は9000以上とダントツに多い。
  • 「リクナビNEXTエージェントNetwork」にて、「紹介求人案件満足度部門」「カウンセリング・対応満足度部門」で1位獲得!
  • 「営業が強い」という口コミが多いが、その分熱心に求人を提案してくれる。
  • 無料相談のWEB登録は、履歴書・職務経歴書不要で、たった60秒で超簡単
  • 無料相談は東京・神奈川・埼玉・千葉で勤務できるエンジニアが対象。

レバテックキャリア

  • Web系企業の求人数が4000以上と豊富
  • 「GOOD AGENT AWARD」で「2018年金賞」受賞!
  • 転職業界の人間同士の会話でも、ITといえばレバテックとまず挙がる。
  • 無料相談のWEB登録は、履歴書・職務経歴書不要で、たった60秒で超簡単
  • 無料相談は東京、千葉、埼玉、神奈川、大阪、兵庫、京都、福岡で勤務できるエンジニアが対象。

ワークポート

  • 求人数は2000以上と上2社より少ないが、古くからIT専門として有名。
  • 「GOOD AGENT RANKING」で「転職決定人数部門」第1位獲得!
  • 無料相談のWEB登録は、履歴書・職務経歴書不要で、たった60秒で超簡単

-アプリ開発

Copyright© SIerからWeb系自社開発に転職!失敗して感じたたった1つの後悔 , 2019 All Rights Reserved.