Làm cách nào để chọn tất cả các bản ghi riêng biệt làm thực thể – ngủ đông – JPA?

lập trình


Tôi muốn chọn tất cả các bản ghi riêng biệt chứ không phải một bản ghi cụ thể và làm thực thể.

Tôi đang sử dụng Ngủ đông 5.6.15, JPA 2.2JDK 11 LTS

Tôi đã cố gắng chọn chuyển đổi làm thực thể Đơn hàng nhưng nhận được:

XML
Caused by: java.lang.ClassCastException: class java.lang.String cannot be cast to class com.tailorfx.pojo.Orders

Những gì tôi đã thử:

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

Vì vậy, tôi muốn chọn tất cả (các) transid riêng biệt nhưng là các thực thể không phải là Chuỗi.
Vậy phải làm thế nào?

Giải pháp 1

Đây là câu trả lời:

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をコピーしました