CriteriaBuilder只有最大的约会

时间:2016-08-04 20:00:54

标签: criteria criteria-api

我正在尝试了解如何仅从联接中选择记录的最新日期。 My People实体与Membership实体联合。我的会员实体有一个RefMembershipStatus实体..我试图从会员实体中选择最新的日期...我的联接看起来如下:

        Join<People, Membership> membershipPath = root.join(People_.membershipList);

        //Membership has property: Membership_.membershipStatusDate   --  I must retrieve ONLY the latest (most current) date in membershipStatusDate..

        Join<Membership, RefMembershipStatus> progPath = membershipPath.join(Membership_.refMembershipStatus);
        predicateList.add(cb.and(progPath.in(selectedStatus)));

1 个答案:

答案 0 :(得分:0)

有两种方法可以做到这一点。

您需要添加一个查找最大日期的谓词。在CriteriaBuilder API中,您将使用greatest方法。它看起来像这样:

Root<Membership> membership = criteria.from(Membership.class);
predicateList.add(cb.greatest(membership.get(Membership_.membershipStatusDate)));

或者您可以使用orderBy然后只选择getFirstResult的第一个结果:

criteriaQuery.orderBy(cb.desc(membership.get(Membership_.membershipStatusDate)));
entityManager.createQuery(criteriaQuery).getFirstResult();