我喜欢过去通过阅读您的主题获得的所有帮助,但是现在我偶然发现了一些我根本不知道如何实现的东西。
编辑:忘记了很大一部分->我的框架:我正在Netbeans上运行它,使用带有EJB的Glassfish服务器和正在MySQL服务器上运行的数据库。另外,我正在使用JPA。
我有一个包含几个表的数据库,但是我需要使用3个联接,以使符合条件的人员脱离该表。
我的数据库:
我将尝试简化我想做的事情,实际上可能会帮助我在打字时对此有所了解。
我试图
在可用性中查找用户发送日期的所有pid。例:
用户在2010年10月10日至2011年1月1日之间发送邮件,我试图查找所有pid,其中在可用性中,from_date“高于”或超过2010-10-10且to_date低于或不迟于2011年1月1日。
在Competence_profile中查找所有pid,其中compence_name是用户发送的名称,并且years_of_experience至少等于或大于用户发送的经验年限。
以某种方式联接它们,以便我从Person表中获得Person p,该联接与联接中剩余的pid匹配(意味着该pid在条件中同时存在于Availability和Competence_profile中)。
如何基于Criteria API进行类似的操作?我玩了一段时间,读了很多教程和topisc,但是没有人能够回答我关于如何以这种形式组合它的问题。
很感谢任何形式的帮助!
最佳答案
这是与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();
关于java - 如何使用Criteria API根据不同的条件查找特定的人?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15116315/