1

あなたのトピックを読むだけで過去に得たすべての助けが大好きですが、文字通り実装方法がまったくわからないものに出くわしました。

編集:大部分を忘れました->私のフレームワーク:EJBを備えたGlassfishサーバーとMySQLサーバーで実行されているDBを使用して、これをNetbeansで実行しています。また、JPAを利用しています。

いくつかのテーブルを含むデータベースがありますが、条件に一致する人を抽出するために結合を使用する必要があるデータベースが 3 つあります。

私のデータベース: 私のデータベース

私がやろうとしていることを単純化しようとしますが、実際には、入力中にこれについての洞察を得るのに役立つかもしれません.

私はしようとしています

  • ユーザーが送信した日付が間にある、Availability 内のすべての pid を検索します。例: ユーザーが期間 2010-10-10 から 2011-01-01 に送信し、可用性で from_date が「より高い」または 2010-10-10 を過ぎており、to_date が低いすべての pid を見つけようとしています。 2011 年 1 月 1 日以降。

  • Competence_profile ですべての pid を検索します。ここで、competence_name はユーザーから送信された名前であり、years_of_experience は少なくともユーザーが送信した経験年数以上です。

  • 何らかの方法でそれらを結合して、Person-table から Person p を取得します。これは、結合から残った pid と一致します (つまり、pid は、基準の Availability と Competence_profile の両方に存在していました)。

Criteria API に基づいてこのようなことを行うにはどうすればよいですか? 私はしばらくそれをいじり、かなり多くのチュートリアルとトピックを読みましたが、実際にこの形式でどのように組み合わせるかについての私の質問に答えることができませんでした.

どんな助けでも大歓迎です!

4

1 に答える 1

0

これは Hibernate Criteria API を使用しています。

     // First set up a subquery to get the ids of Persons who are available
     // (assuming that the Person must be available for the entire duration)
     DetachedCriteria dc = DetachedCriteria.forClass(Person.class)
         .setProjections(Projections.id())
         .createAlias("availability", "a")
         .add(Restrictions.le("a.to", endDate)
         .add(Restrictions.ge("a.from", startDate);

     Criteria crit = session.createCriteria(Person.class)
          .createAlias("competence", "c")
          .add(Restrictions.eq("c.name", competenceName)
          .add(Subqueries.in(dc,"id");

     List<Person> people = crit.list();
于 2013-02-28T16:08:15.483 に答える