我正在尝试了解如何仅从联接中选择记录的最新日期。 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)));
答案 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();