学習70日目:メンタリング9回目(JPQLの内部結合)。

今日の学習時間。

  • Day:70
  • Today:3h
  • Total:429h

学習内容について。

  • アプリ開発
    • フォロー機能
  • メンタリング9回目:30min.

メンタリングの内容メモ。

今日のメンタリングでは詰んでいたところの質問を主に行いました。Eclipse画面をシェアスクリーンで共有しながらです。具体的には、タイムラインのIndexでどのように日報一覧を取得するかについて。

自分で考えていたプラン
  1. セッションスコープに入っているログインidを取り出す
  2. そのログインidを元に、フォローしている人のidをListに格納
  3. Listに格納したフォローしている人のidが含まれる日報をリストに格納

一見すると良さげに見えますが、この方法には致命的な欠陥があります。まず、Listの型を違うクラスの型にすることはできません。Listに限らないけど、他の型からクラス型にはできないと言うことですね。上記の方法だとInteger型をFollow型にしようとしていたためにエラーが発生していました。

また、ListにListのパラメータをセットすることは当然できません。もし、そんな風にしたいのであれば、for文か何かでListを回してあげる必要があります。この方法でもデータを取得することは出来ますが、並び替えが出来ないのは一覧表示にとっては大きな欠点です。

最終的に最もベストな方法としてはJPQLを使う方法です。SQLに似ていますが、微妙に記法が異なります。私も最初はこの方法でいけるかなと思いました。しかし、どうやってテーブル間の結合をすれば良いのかがよく分からなかったのです。今回のメンタリングでは今まで使ったことがなかった、というか知らなかった内部結合の仕方を学びました。これで上記のような複雑なことをせずとも、それぞれのファイルに機能が分かれたスッキリとした設計になります。

下のリンクはJPQLの@NamedQueryを書いているときに発生した謎のエラーを解決するときに参考にした記事。

今日の反省と明日の目標。

自分なりに考えるのはプログラミングをする上で良いトレーニングになるとは思いますが、それが車輪の再発明的なことだと何だか疲れます。まあ、以前に比べるとエラーが出たとしても、それを解決するための選択肢が幾つか生まれる状態になってきたかと。前は、自分が何に悩んでいるのかすら分からなかったので辛かったです。しかし、今はTomcatを再起動してアプリにログインしてちゃんと機能が動くか、エラーが直ったかを検証するドキドキ感を楽しめてきました。

明日は幾つかJPQLの文を考えて挙動を確認するところから始めたいと思います。SQLとは違って値をセットできるのでそこを重点的に。できれば、フォロー機能の実装は終えてしまいたいです。

閉じる