इकाइयों के रूप में सभी विशिष्ट रिकॉर्ड का चयन कैसे करें – हाइबरनेट – जेपीए?


मैं किसी विशिष्ट रिकॉर्ड को नहीं बल्कि सभी अलग-अलग रिकॉर्ड्स को संस्थाओं के रूप में चुनना चाहता हूं।

मैं उपयोग कर रहा हूं हाइबरनेट 5.6.15, जेपीए 2.2 और जेडीके 11 एलटीएस

मैंने ट्रांज़िड को ऑर्डर इकाई के रूप में चुनने का प्रयास किया लेकिन मुझे यह प्राप्त हुआ:

एक्सएमएल
Caused by: java.lang.ClassCastException: class java.lang.String cannot be cast to class com.tailorfx.pojo.Orders

मैंने क्या प्रयास किया है:

जावा
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();
    }
}

इसलिए मैं सभी अलग-अलग ट्रांज़िड का चयन करना चाहता हूं, लेकिन इकाइयों के रूप में, स्ट्रिंग के रूप में नहीं।
तो कैसे करें?

समाधान 1

यहाँ उत्तर है:

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();
    }
}

コメント

タイトルとURLをコピーしました