Kriterleri SQL statments oluşturmak için yansıma kullanın. Bunun nedeni, Kriterleri hiçbir şeyi ayrıştırmak zorunda değil. HQL sorguları bir ANTLR tabanlı çözümleyici ile ayrıştırılır ve sonuçta oluşan AST, SQL'e dönüştürülür. Ancak, HQL/JPAQL ile, SessionFactory başlatıldığında SQL'in oluşturulduğu adlandırılmış sorguları tanımlayabilirsiniz. Teoride, adlandırılmış sorguların Kriterlere göre daha az başı vardır. Yani, SQL nesil yükü bakımından elimizdeki:/JPAQL Sorgu HQL Named
- - SQL üretimi sadece bir kez olur.
- Kriterler - Oluşturmadan önce ayrıştırmaya gerek yoktur.
- (adlandırılmamış) HQL/JPAQL Sorgu - Ayrıştırma, sonra üret. Bu, ayrıştırma ve SQL nesil yükünü temel alan bir sorgu tekniği seçmek muhtemelen benim düşüncemde bir hata olduğunu söyledi. Gerçek veri ile gerçek bir veritabanı sunucusunda gerçek bir sorguyu gerçekleştirmeye kıyasla, bu ek yük genellikle çok küçüktür. Uygulamanın profilini oluştururken bu ek yük gerçekten görünürse, belki de adlandırılmış bir sorguya geçmelisiniz. İşte
Kriterleri ve HQL/JPAQL arasında karar verirken bunu göz önünde noktalar şunlardır:, içeri hazırda-özel API bir bağımlılık sahip iyisin eğer karar vermek zorunda
- İlk senin kodu. JPA’da Kriterler yok. çok parametreli bir parametre ile, çok parametre 'arama formu' gibi tipik bir web sayfasında bulabilirsiniz. HQL ile, geliştiriciler StringBuilder ile ifadelerinin nerede olduğunu anlamaya meyillidir (bundan kaçın!). Kriterlerle, 'un bunu yapmanıza gerek yoktur.
- HQL/JPAQL diğer birçok şey için kullanılabilir, çünkü kod, geliştiricilerin anlaması için 'un daha küçük ve daha kolay olma eğilimindedir.
- HQL kullanıyorsanız, çok sık kullanılan sorgular adlandırılmış sorgulara dönüştürülebilir. Bunu bir profil yaptıktan sonra yapmayı tercih ederim.
Sen HQL ve Kriterler sorguları gösterebilir miyim burada http://tech.puredanger.com/2009/07/10/hibernate-query-cache/
bazı ek bilgi okuyabilir? –
Sorgu, parametrelere bağlıdır. Daha basit kayıtlardan biri aşağıdaki gibidir: R r'den seçim sayısı (*), burada r.ISREPLACEDBY = 0 ve r.STATUS = 'OK' ve r.A =? ve r.C in (CX cx'den cx.FROMDATE> =? ve cx.FROMDATE <=? 'dan farklı RC'yi seçin.) – bertolami