SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

今からでも遅くない、JPAを学ぼう!

今からでも遅くない JPAを学ぼう!(後編)
オブジェクト間の関連を理解し、JPQLを使用する

ディレクション、カーディナリティは難しくない

ダウンロード サンプルコード (14.2 KB)

知っていることと知っていないことの差は大きい

 以前、複数のEntityクラスのフィールドを集めるJPQL文を書くのに苦労しました。今回のgetBasketItemsメソッドがまさにそのような例です。当メソッドで説明したようにNEWが使えると知る前は、次のようなコーディングをしていました。NEWを知っていたならこんな苦労はしていなかったでしょう。知っていればなんてことはない処理も、知らなければ苦痛でしかありません。読者の皆さまからJPQLはこのようにすればもっと簡単に書けるというようなコメントをいただき、よりよいサンプルコードに成長させることができればと思っています。

001:List basketItemContents = new ArrayList();
002:// userIdは固定で「tomoharu」を設定
003:Query query = entityManager.createQuery(
004:        "SELECT  bi.id, m.name, m.price, bi.quantity " +
005:        "FROM BasketItem AS bi INNER JOIN bi.meigara AS m, " +
006:        "Basket AS b " +
007:        "WHERE b.userId = :userId")
008:        .setParameter("userId", "tomoharu");
009:List resultList = query.getResultList();
010:BasketItemContent basketItemContent = null;
011:for (int i = 0; i < resultList.size(); i++) {
012:    Object[] oList = resultList.get(i);
013:    for (int k = 0; k < oList.length; k++) {
014:        System.out.println("oList[" + k +"] = " + oList[k]);
015:    }
016:    basketItemContent = new BasketItemContent();
017:    basketItemContent.setId(((Integer)oList[0]).intValue());
018:    basketItemContent.setName((String)oList[1]);
019:    basketItemContent.setPrice(((Integer)oList[2]).intValue());
020:    basketItemContent.setQuantity(((Integer)oList[3]).intValue());
021:    basketItemContents.add(basketItemContent);
022:}
023:return basketItemContents;

おさらい

 今回説明したことをおさらいします。

  • Entityクラス間のディレクションとカーディナリティを整理しました
  • Entityクラス間の関連の指定の仕方を説明しました
  • JPQLを使って複数のEntityから値を取得する方法や、更新する方法を説明しました

 今回のJava EEプロジェクトのフォルダ構成は図6の通りです。説明したクラスやServlet、JSPはサンプルコードとしてページトップに置いているので、ダウンロードしてご使用ください。また、MySQLのリストア用SQLファイルも添付しています。1から構築するのが面倒な場合はMySQL Workbenchでリストアしてご使用ください。

図6.今回のプロジェクトのフォルダ構成
図6.今回のプロジェクトのフォルダ構成

この記事は参考になりましたか?

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
今からでも遅くない、JPAを学ぼう!連載記事一覧
この記事の著者

川久保 智晴(カワクボ トモハル)

haruプログラミング教室(https://haru-idea.jp/)主宰。COBOL、FORTRANで13年、Javaを中心としたWeb開発で11年。3つしか言語知らないのかというとそうでもなく、sed/awk、Perl、Python, PHP,  C#, JavaScriptなども一時期は業...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/5061 2010/05/14 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー