// 下階層用テンプレート
#topicpath
----
//ここにコンテンツを記述します。
通常、ユーザクラスを検索して、それにひも付く顧客を検索するには、
 user = (User) session.load(User.class, user.getId());
 Set customers = user.getCustomers();
 Iterator e = customers.iterator();
 while (e.hasNext()) {
     Customer element = (Customer) e.next();
     logger.debug(element);
 }
とすればOKです。これに対して、ソート処理など更にクエリをかけるには以下のようにすればOKです。
 user = (User) session.load(User.class, user.getId());
 Query query = session.createFilter(user.getCustomers(),
         "order by this.name asc"); <-この条件を↑のセットに対して行う
 List list = query.list();
 Iterator e = list.iterator();
 while (e.hasNext()) {
     Customer element = (Customer) e.next();
     logger.debug(element);
 }
これでthis.name(CUSTOMER.NAME)でソートをかけることができます。thisはコレクション(customers)の要素customerとなります。

これを使うことで、ユーザクラスにひも付いてる顧客のうち名前が××の顧客、とか有効フラグがたっている顧客のみ、などの検索ができますね。たとえば名前が××の顧客のみ検索、は以下の通り。
 Query query = session.createFilter(user.getCustomers(),
         "where this.name=:name").setString("name", "××");
 List list = query.list();
発行されたSQLは以下の通り。
 select user0_.ID as ID4_0_, user0_.NAME as NAME4_0_, user0_.ADDRESS as ADDRESS4_0_ 
  from Samples.USER user0_ where user0_.ID=?
 select customer0_.ID as ID5_, customer0_.USER_ID as USER2_5_, customer0_.NAME as NAME5_
  from Samples.CUSTOMER customer0_ where customer0_.USER_ID = ? and customer0_.NAME=?

ちゃんと検索条件が結合されてからSQLが発行されています。。

これは便利だ。。。。




----
この記事は
#vote(おもしろかった[2],そうでもない[1])

#comment
#topicpath


SIZE(10){現在のアクセス:&counter;}

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS