Bagaimana cara memilih semua catatan berbeda sebagai entitas – hibernasi – JPA?

pemrograman


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

コメント

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