[ad_1]
Saya ingin memilih semua catatan berbeda, bukan catatan spesifik dan sebagai entitas.
saya menggunakan Hibernasi 5.6.15, JPA 2.2 Dan JDK 11 LTS
Saya mencoba memilih transid sebagai entitas Pesanan tetapi mendapatkan:
XML
Caused by: java.lang.ClassCastException: class java.lang.String cannot be cast to class com.tailorfx.pojo.Orders
Apa yang saya coba:
Jawa
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(); } }
Jadi saya ingin memilih semua transid yang berbeda tetapi sebagai entitas bukan sebagai String.
Jadi bagaimana caranya?
Solusi 1
Inilah jawabannya:
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]
コメント