HibernateのHQLを使用し、java.util.Dateクラスを元にDB検索

GW中に、以前から作成しようとしていた作業日報プログラムについて、一気に作成してしまおうと計画していました。結果としては、復習しなくてはいけないことが多すぎて、終わりませんでしたが、いろいろと勉強になりました。その中で、おお〜!と思ったことを記事にします。


内容は、HibernateのHQLを使用し、java.util.Dateクラスを元にDB検索です。
まず、検索対象のテーブルは以下の通りです。

| dailyreport | CREATE TABLE `dailyreport` (
  `ID` int(10) unsigned NOT NULL AUTO_INCREMENT,
      ・
  `user` int(10) NOT NULL,
  `starttime` datetime DEFAULT NULL,
  `endtime` datetime DEFAULT NULL,
    ・

この中のstarttimeを元に検索します。このテーブルに対し、DailyReportというクラスを準備しHibernateでORマッピングします。starttimeはDailyReportクラスの中でjava.util.Dateクラスとしてマッピングしました。


このDailyReportに対し、HibernateHQLを用いた検索は以下のようになります。

List<DailyReport> drlist = drsession.createQuery(
    "from DailyReport DR where DR.starttime between :from and :to")
    .setParameter("from", begindate)
    .setParameter("to",enddate)
    .list();

starttimeを対象にHQLでデータ検索をかけている所です。:fromと:toタグのところには、PreparedStatementのように、後からパラメーターをセットしています。ここで渡しているbegindateやenddateは、目的の日付の0時と23時59分…を示すjava.util.Dateクラスのインスタンスです。


SQLでは文字列や式等をもっと記述する必要があると思いますが、HQLではシンプルですね。DB依存も少ないと思います。