Hazırda bekletme ipuçları: ölçüt sorgusunu kullanarak skaler değerleri seçin

Portakalkafa

Global Mod
Global Mod
Hazırda Bekletme İpuçları serisi, yaygın Hazırda Bekletme sorularına hızlı ve kolay çözümler sunar. Bu kez Criteria sorgularında bir skaler izdüşüm kullanmakla ilgili.


Rica etmek:


Java Kalıcılık Sorgu Dili (JPQL) sorguları, geliştiricilerin birden çok skaler değer seçmesine olanak tanır. Aynı projeksiyonu bir ölçüt sorgusu ile kullanabilir miyim yoksa her zaman varlıkları veya veri aktarım nesnelerini (DTO’lar) seçmek zorunda mıyım?

Çözüm:


Criteria API genellikle biraz kafa karıştırıcı görünse de, JPQL ile aynı işlevselliği destekler. Varlıkları, DTO’ları ve skaler değerleri birleştiren projeksiyonlar gibi çoklu skaler değerlerin projeksiyonları da bu nedenle mümkündür.

Farklı skaler değerler seçmek için, çoklu seçim(Seçim… seçimler)– Yöntemi kullanın. Aşağıdaki kaynak kodu, böyle bir sorgunun bir örneğini gösterir:

// Abfrage erzeugen
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Tuple> q = cb.createTupleQuery();
Root<Author> author = q.from(Author.class);
// Mehrere skalare Werte selektieren
q.multiselect(author.get(Author_.firstName).alias("firstName"), author.get(Author_.lastName).alias("lastName"));

// Abfrage ausführen
List<Tuple> authorNames = em.createQuery(q).getResultList();

for (Tuple authorName : authorNames) {
log.info(authorName.get("firstName") + " " + authorName.get("lastName"));
}


the çoklu seçimyöntem sağlar liste veya bir dizi seçim-Seçilecek varlığın özelliklerini adlandıran arayüzler. Bu örnekte, özelliklere güvenli bir şekilde başvurmak için JPA meta modelini kullanıyorum.


Örnek çalıştırıldığında, Hibernate yalnızca dosyadakileri içeren bir SQL sorgusu oluşturur. çoklu seçim-Seçili yöntem referanslı veritabanı sütunları:

13:57:18,403 INFO[org.thoughts.on.java.model.TestCriteriaTuples] - ... selectTuples ...
13:57:18,818 INFO[org.hibernate.hql.internal.QueryTranslatorFactoryInitiator] - HHH000397: Using ASTQueryTranslatorFactory
13:57:19,158 DEBUG [org.hibernate.SQL] -
select
author0_.firstName as col_0_0_,
author0_.lastName as col_1_0_
from
Author author0_
13:57:19,188 INFO[org.thoughts.on.java.model.TestCriteriaTuples] - Thorben Janssen
13:57:19,188 INFO[org.thoughts.on.java.model.TestCriteriaTuples] - Joshua Bloch
13:57:19,189 INFO[org.thoughts.on.java.model.TestCriteriaTuples] - Gavin King

Sorgu sonucu daha sonra şu şekilde kaydedilir: liste itibaren demet– Arayüzler geri döndü. O demet-Arayüz seçilen özelliklere kolay erişim sağlar. Seçilen sütunlara dizin veya bu örnekte olduğu gibi takma ad olarak atanan adla başvurulabilir.


Hazırda Bekletme İpuçları: Kitap


“Hibernate Tips: 70+ Solutions to Common Hibernate Problems” adlı kitabım, basit ve karmaşık eşleme tanımları, günlüğe kaydetme, Java 8 desteği, önbelleğe alma ve statik sorgular ve dinamikler oluşturma gibi konularda 70’den fazla tarif içeriyor. Amazon’da basılı ve e-kitap biçiminde ve hibernate-tips.com adresinde PDF biçiminde mevcuttur.








()



Haberin Sonu
 
Üst