Hibernate 5 - Как получить последнюю запись в каждой группе? - PullRequest
0 голосов
/ 09 мая 2019

У меня есть стол под названием Sale.Я хочу получить последнюю запись о продаже для каждого type автомобиля.

public class Sale {

   private Long id,
   private String make,
   private String model,
   private Integer year,
   private String type, // sedan, suv, van, truck etc.
   private Double price
}

У меня есть запрос MySQL, который дает мне требуемый результат, который выглядит следующим образом:

SELECT s1.*
FROM sale s1 LEFT JOIN sale s2
 ON (s1.type = s2.type AND s1.id < s2.id)
WHERE s2.id IS NULL; 

Я хочу написать этот запрос, используя подход Hibernate 5.Я искал код, похожий на следующий.

final CriteriaBuilder criteriaBuilder = getSession().getCriteriaBuilder();

final CriteriaQuery<Sale> query = getSession().getCriteriaBuilder().createQuery(Sale.class);
final Root<Sale> sale1 = query.from(Sale.class);
final Root<Sale> sale2 = query.from(Sale.class);

final Join<Sale, Sale> leftJoin = sale1.join(sale2, JoinType.LEFT); // This is an error right now
final Predicate typeMatch = criteriaBuilder.equal(sale1.get("type"), sale2.get("type"));
leftJoin.on(typeMatch);

final Predicate sale2Null = criteriaBuilder.isNull(sale2.get("id"));

query
    .select(sale1)
    .where(sale2Null);

getSession().createQuery(query).getResultList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...