|
通常、ユーザクラスを検索して、それにひも付く顧客を検索するには、 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が発行されています。。 これは便利だ。。。。 この記事は 現在のアクセス:7175 |