[ad_1]
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.2 Và JDK 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(); } }
[ad_2]
コメント