Sistemimdeki bir Varlık için "Gelişmiş Arama" işlev türünü uygularım, böylece kullanıcının bu koşulu birden çok koşul (örneğin, eq, ne, gt, lt, vb.) Kullanarak arayabilir Bu varlığın nitelikleri hakkında. Dinamik olarak Kriteri sorgusunu oluşturmak için JPA'nın Kriterler API'sini kullanıyorum ve sayfa numaralandırmayı desteklemek için setFirstResult()
& setMaxResults()
'u kullanıyorum. Bu noktaya kadar her şey yolundaydı, ancak şimdi sonuçların grid sonuçlarında toplam sayısını göstermek istiyorum ancak Kriterler sorgusunun toplam sayısını elde etmek için ileriye doğru bir yol görmedim. Benim kod nasıl göründüğünü
budur:JPA Ölçütleri API'sini kullanarak sayfalandırma için toplam satır sayısı
CriteriaBuilder builder = em.getCriteriaBuilder();
CriteriaQuery<Brand> cQuery = builder.createQuery(Brand.class);
Root<Brand> from = cQuery.from(Brand.class);
CriteriaQuery<Brand> select = cQuery.select(from);
.
.
//Created many predicates and added to **Predicate[] pArray**
.
.
select.where(pArray);
// Added orderBy clause
TypedQuery typedQuery = em.createQuery(select);
typedQuery.setFirstResult(startIndex);
typedQuery.setMaxResults(pageSize);
List resultList = typedQuery.getResultList();
Benim sonuç kümesi yüzden sayım sorgusu için benim varlıkları yüklemek istemiyorum büyük olması, böylece rowCount()
yöntemle gibi toplam sayısını almak için bana etkili yolu söyleyebilirdi Kriterler (Ben orada Hibernate Kriterleri'nde olduğunu düşünüyorum).
Niçin 'em.createQuery (cq);' yi eklemeniz gerektiğini tam olarak öğrenebildiniz mi? Teşekkürler – Ittai
Hey, bu sadece ihtiyacım olan şey ... bu da neden bu hat gerekli olduğunu bilmek isterim! –
"Predicate" in bu bölümden "Root <>" kullanılarak oluşturulduğundan şüpheleniyorum. "Root = cQuery.from (Brand.class);' ve sonra ikisi için kullanılır sayma sorgusu ve disk belleği sorgusu. AFAIK, hem 'Root <> 'nesnelerini kullanarak iki kez yüklemleri oluşturmanız gerekir. İkincisi bu satırda gizlidir. Cq.select (builder.count (cq.from (Brand.class))); '. Neden tam olarak em.createQuery (cq); 'bilmiyorum çalışır, IMO bir istisna atmalıdır. –
Neilos