У меня есть стол под названием 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();