frei

旧「anney's room」からブログ「frei」だけ引っ越し&残しました

O/Rマッピング中。

石橋を叩いて叩いて、渡る前に叩き割ってた時代にさらば。

ども、あに山です。

今日も本屋で立ち読みと、図書館行って本借りてきました。

帰宅すると、演習のHibernate[はいばねーと]の設定して、

動かしてみたら、ちゃんとDBと連携できて。

やったー!とか思いつつ、引き続き操作してたら

SessionFactoryまわりで怪しい動きをしてるので

ちょっと傾向調べているところです。

って訳で、まだ設定が正しいか怪しいので

詳細は書かない方がいいんだけど、

セッティングしながら、うだうだ書いてた

とりとめのない文章を貼っておきます(笑)

おまけ。

キーワード:

インピーダンスミスマッチ

HIBERNATE - 慣用的な Java のためのリレーショナル永続性

カップヌードル・カスタムカーソル2 for Windows

「ときどき、クルリと回るキュートなアニメーション付き」だそうな。

・・・だから何?とか言われると困る(笑)

砂時計スクリーンセーバーもなかなか。

Hibernate3系では、クラスのFQCNが変更されていて

かつての net.sf.hibernate... ってーんじゃなくて

org.hibernate... となってるっぽい。

これって運営サイトのドメインが変わったって事か?

自分が丁度サイトの引越し中で、ドメイン変更中だから

2つのドメインの移行期は大変だろうなぁ…とか

うすうす考えてたんだけど、まさにこれがそれってヤツか?

おまけに、Session と名のつくクラスが2つあって

 org.hibernate.classic.Session

 org.hibernate.Session

…って新旧用意されてる模様。

org.hibernate.classic.Session が

かつての net.sf.hibernate.Session

にあたるらしい。

で、そのかつて使えた findメソッドは、

org.hibernate.classic.Session で使うと怒られちゃって

「The method find(String, Object, Type) from the type Session is deprecated」

…と言われる。うーむ、そうか。なら代わりを調べないとな。

で、まぁ、classic でこう言われるくらいなんだから

きっと新しいSessionクラスじゃ、findはないんだろう…と思いつつ

試しにclassicは消し、Sessionクラスをimportして、findを使おうとすると

「The method find(String, String, NullableType) is undefined for the type Session」

…と言われる。やっぱりね。

じゃ、findは何やってたの?ってーんで古いAPI見ると

「Execute a query」と書いてある。

おっけー。ほんじゃ新しいAPI見てみっか。

んあー、ピンと来るメソッドがすぐに見つからないので

Hibernate解凍して現れたdocディレクトリ下の

「deprecated-list.html」を読んでみると…

org.hibernate.classic.Session.find(String, Object, Type)

use createQuery() Bind a value to a "?" parameter in the query string.

…とのこと。はいはい、じゃ createQuery() ですな。

…って、うまくいかないぞ。

引数に String しか持たせられないじゃないか。

あー。なんかいろいろ勉強せなアカンようだぞ。くそー。

まず HQL を食器洗いの後で調べよう。

HQL : SQLライクの高級言語

あ、createQueryを検索したら、あっさり正解判明。

Query query = session.createQuery("FROM User user WHERE user.name = ?");

List list = query.setString(0, name).list();

とりあえず動かしてみて、OK。

続いて今度は独自のJavaBeansとDAOを生成して、それで実行。

単純ミスがあって動かなかったりしつつも、すぐにOK。

やったー。

それと…

Query query = session.createQuery("FROM User user WHERE user.name = :name");

List list = query.setString("name", name).list();

…って書き方もアリっぽい。