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