1

我喜欢过去仅仅通过阅读您的主题而获得的所有帮助,但是我现在偶然发现了一些我根本不知道如何实施的东西。

编辑:忘记了很大一部分-> 我的框架:我在 Netbeans 上运行它,使用带有 EJB 的 Glassfish 服务器和在 MySQL 服务器上运行的数据库。我也在使用JPA。

我有一个包含多个表的数据库,但有 3 个我需要使用连接,以便让符合条件的人从中脱颖而出。

我的数据库: 我的数据库

我将尝试简化我正在尝试做的事情,实际上可能会帮助我在打字时对此有所了解。

我试图

  • 在可用性中查找用户发送的日期介于两者之间的所有 pid。示例:用户在 2010 年 10 月 10 日至 2011 年 1 月 1 日期间发送,我试图找到所有 pid,在可用性中,from_date 为“高于”或超过 2010-10-10 并且 to_date 低于超过或不超过 2011-01-01。

  • 在 Competence_profile 中查找所有 pid,其中,competent_name 是用户发送的姓名,years_of_experience 至少等于或大于用户发送的经验年限。

  • 以某种方式加入它们,以便我从 Person 表中获取 Person p,它与加入后剩余的 pid 匹配(这意味着,该 pid 存在于标准的可用性和 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 回答