8

Person と Activity という 2 つのエンティティがあります。アクティビティにはプロパティ ステータスがあり、Person エンティティにはアクティビティのコレクションが含まれています。ステータスが「完了」のすべてのアクティビティを持つ人のリストを取得したいと思います。

   Criteria crit = s.createCriteria(Person.class);
   crit.createAlias("activities", "act").add(Restrictions.eq("act.status","Done"));

ただし、これは、ステータスが完了した少なくとも 1 つのアクティビティを含むすべてのオブジェクトを返します。すべてのアクティビティ ステータスが [完了] に設定されている人のリストを取得したいと思います。誰でも私を助けることができますか?

4

3 に答える 3

1

それを否定して考えてください。アクティビティがあり、状態が と異なるものを取得しDoneます。maxResults()次に、 orを追加するだけですlist.get(0)(人が含まれていない可能性があることに注意してください)。

于 2012-05-17T21:50:33.993 に答える
1
// open hibernate session
Query query = session.createQuery("Select p from Persons p inner join p.activities a where a.status = :code");
query.setParameter("code", "Done");
List results = query.list();

// close session

for (int i = 0; i < results.size(); ){
  Person person = results.get(i);
  List<Activity> activities = person.getActivities();
  for (int j = 0; j < activities.size(); j++){
    if (!activities.code.equals("Done")){
      results.remove(i);
      break;
    } // end if
  } // end for j
  i++;
} // end for i

これでうまくいくはずです。遅延ロードがある場合は、Hibernate クエリに「fetch」キーワードを追加する必要がある場合があることに注意してください。結合に関する便利なリンクは次のとおりです: http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/queryhql.html#queryhql-joins

于 2012-05-18T04:01:59.090 に答える