comment 0

Hibernateをいじる(6)

久しぶりですが、Hibernate。
次は、SELECT系をまとめておきます。

1.get()で取る

単純に主KEYで取る場合に使用します。DBに該当レコードがない場合はnullが返ります。
似て非なるものにload()もあります。こちらはDBに該当レコードがないと例外になります。プロキシを使う場合だと、プロキシオブジェクトが返ります。
深いことを考えなければ、get()で良いでしょう。

[java]
Student erika = (Student)session.get(Student.class, new Long(1));
[/java]

2.Queryで取る

複数レコードが必要だったり、主KEY以外で検索するなら、get()やload()ではダメです。
HQLを使いましょう。

[java]
Query query = session.createQuery(“FROM Student”);
List studentList = query.list();
[/java]

もうちょっと複雑な例。

[java]
Query query = session.createQuery(“FROM Study AS study WHERE study.student.gakusekiNo=~ AND study.subject.code=~”);
query.setString(0, “0499001”);
query.setString(1, “14501”);
Study study = (Study)query.uniqueResult();
[/java]

このように、ちょうどPreparedStatementのようなことが出来ます。
注目する点は2つ。
1つは、Study AS studyのように、別名をつけている点です。WHERE句で使用するクラスは別名を付け、WHERE句は別名で指定します。
もう1つは、study.subject.code=~のような指定方法。WHERE句での検索条件が、FROM句で指定したテーブルではなく、何らかのJOINを行った先のテーブルのカラムである場合、SQLならJOINの指定が必要です。しかし、HQLではそれは不要で、単純に取得したいクラスをFROM句で指定し、あとはWHERE句でstudy→subject→codeとJavaオブジェクトのプロパティ名でたどっていけばOKです。クラス間(テーブル間)のマッピングが、設定ファイルで定義されているためでしょう。

「Hibernateをいじる(7)」につづく

Follow me!

Filed under: ブログ

About the Author

Posted by

経済産業省推進資格ITコーディネータ/ITエンジニア。井上研一事務所代表、株式会社ビビンコ代表取締役。北九州市出身、横浜市在住。 2000年よりプログラマ・SEとして企業の業務システム開発に従事し、2012年に独立。AIやIoTに強いITコーディネータとしても活動中。著書に「初めてのWatson」、「ワトソンで体感する人工知能」など。セミナーや研修講師での登壇も多数。

コメントを残す