skillup

技術ブログ

Database Java

JPQLでの算術関数

投稿日:2015年9月19日 更新日:

複雑なJPQLを書いていると、通常のレコードの取り出しだけではなく、合計(SUM)や算出(COUNT)などのいわゆる算術関数を使うことが一般的です。

JPQLでもこれらを通常通り扱うことができます。

サンプルケースその1

検索結果がSUMやCOUNTなどの数値のみの場合

例えばid とscore(点数)のみのエンティティ(Student.classとします。)があるとし、

これの合計値を求めたい場合下記のように取り出すことができます。

サンプルケースその2他のレコードと一緒に算術式も出す場合

例えば

ある会社の部署(プロパティ id, departmentName)と

社員(id,departmentiId,age)があり、ある部署の社員の年齢の合計を出したいとします。

こちらは少々複雑でDTOというクラスを作ります。

このリレーションに関しては、こちらの記事でも書いてまして、基本的には同じです。

  • エンティティを継承する(エンティティのプロパティをそのまま使える)し、コンストラクタ式を使う
  • 合計値やリレーションのプロパティなど既存のエンティティにないものを持てる

BushoDto

JPQLでのコード

上記のようにすることでO/Rマッパーを使った算術式が使えます。

参考リンク

JPQLで使用可能な算術関数

http://itref.fc2web.com/java/jpa/

GlassFish勉強会で金魚本に載ってないJPQLの話をしてきた

JPQLでの算術式のサンプルコード

JavaEE使い方メモ(JPA その3 – JPQL)

JavaEE使い方メモ(JPA その4 – クライテリアAPI)

-Database, Java
-,

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

no image

MySQLの大文字、小文字問題について

MySQLでテーブルを作る際にカラムに重複を許さない制約(unique)を振ることがあると思います。 数字の場合は問題ないのですが、文字列の場合、なんと英語の大文字と小文字が区別されません。 つまりa …

no image

GlassFishでDB接続

JavaEEではアプリケーションサーバーとしてGlassFishを使いますが、先日、GlassFishを通さないとJavaEEでDBが動かせないということを知りました。そのためJavaEEではデータベ …

no image

Javaでのスクレイピング

スクレイピングというと一般的にはRubyが一番有名なようですが、もちろんスクレイピング自体はどの言語でも行うことができます。 Contents1 スクレイピングの手法1.1 正規表現1.2 HTMLパ …

no image

データベース文字コード対策他

Contents1 JDBC文字化け対策2 BigDecimal2.1 ソース2.2 参考リンク3 CreateQuery4 jsfのconvertNumber JDBC文字化け対策 データベースがu …

no image

フィールド以外のプロパティをエンティティに持たせる

JPAでは基本的に1テーブル、1クラスです。 このためプロパティは必然的にテーブルのフィールドに対応しています。 ただ、必ずしもプロパティだけでなく、臨時で持たせておきたい、プロパティがあったりします …