Click here to Skip to main content
15,881,092 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
I want to select all distinct records not a specific one and as entities.

I'm using Hibernate 5.6.15, JPA 2.2 and JDK 11 LTS

I tried to select transid as an Orders' entity but getting:
XML
Caused by: java.lang.ClassCastException: class java.lang.String cannot be cast to class com.tailorfx.pojo.Orders


What I have tried:

Java
public List<Orders> custOrder() {
    try ( Session session = HibernateUtil.getSessionFactory().openSession()) {
        CriteriaBuilder cb = session.getCriteriaBuilder();
        CriteriaQuery<Orders> cq = cb.createQuery(Orders.class);
        Root<Orders> root = cq.from(Orders.class);

        cq.select(root.get("transid")).distinct(true);

        return session.createQuery(cq).getResultList();
    }
}



So I want to select all distinct transid(s) but as entities not as String.
So how to do?
Posted
Updated 18-Mar-23 6:49am
v2

1 solution

Here's the answer :

public List<Orders> custOrder() {
    try ( Session session = HibernateUtil.getSessionFactory().openSession()) {
        CriteriaBuilder cb = session.getCriteriaBuilder();
        CriteriaQuery<Orders> cq = cb.createQuery(Orders.class);
        Root<Orders> root = cq.from(Orders.class);

        Subquery<Long> subquery = cq.subquery(Long.class);
        Root<Orders> subRoot = subquery.from(Orders.class);
        subquery.select(cb.max(subRoot.get("id")));
        subquery.groupBy(subRoot.get("transid"));

        cq.where(cb.in(root.get("id")).value(subquery));

        return session.createQuery(cq).getResultList();
    }
}
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900