Hybernation Önerisi: Hazırda bekletici sorgular önbellek ile gereksiz sorgulardan kaçının
Tipps Hibernate serisi, hazırda bekletme sorularını yaymak için hızlı ve basit çözümler sunuyor. Bu kez, sorguların sonuçlarını depolamak için sorguların sorgularını kullanma meselesidir.
Sormak:
Hibernate, sorgu için birinci ve ikinci seviye önbelleğini kullanmaz. Soruların sonuçlarını bir önbellekte kaydetmenin bir yolu var mı?
Çözüm:
JPA standardında tanımlanan iki önbelleğe ek olarak, Hibernate, sorguların sonuçlarının kaydedilebileceği sorguların taşıtlarını sunar. Standart yapılandırmada devre dışı bırakılır ve persistence.xml-File etkinleştirilecek. Bunu yapmak için parametre Hibernate.cache.use_query_cache “Doğru” ve Hibernate.cache.region.factory_class-Classe yapılandırılacak.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.1" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
<persistence-unit name="my-persistence-unit">
...
<properties>
...
<!-- configure caching -->
<property name="hibernate.cache.use_query_cache" value="true"/>
<property name="hibernate.cache.region.factory_class" value="org.hibernate.cache.ehcache.EhCacheRegionFactory"/>
</properties>
</persistence-unit>
</persistence>
Ayrıca, ocağı önbelleği ilgili sorgu için etkinleştirilmelidir. Bir sorgunun sonucunun SQL sorgusunun kendisine ve kullanılan parametrelerin değerlerine bağlı olduğuna dikkat edilmelidir. Bu nedenle, taş ocağı önbelleğine kaydedilen sorgunun bir sonucu, yalnızca önceki sorgu parametrelerle aynı değerlerle gerçekleştirilmişse kullanılabilir.
Session s = (Session) em.getDelegate();
Query q = s.createQuery("SELECT a FROM Author a WHERE id = :id");
q.setParameter("id", 1L);
q.setCacheable(true);
log.info(q.uniqueResult());
Önbellekte depolama konusu hakkında daha fazla bilgi
Hibernate, farklı uygulama senaryolarında önemli performans iyileştirmelerine yol açabilecek 3 önbellek sunar. Ancak, bu avantajlar ücretsiz olarak elde edilmez. Bir önbelleğin yönetimi daha fazla çaba yaratır ve hatta uygulamayı yavaşlatabilir. Hazırda bekletme önbelleği ve ideal uygulama senaryoları hakkında daha fazla bilgi “kış uykusuna yatan performans için çevrimiçi eğitim” nde mevcuttur.
Hazırda Geri Gösterim İpuçları – Kitap
Basit ve karmaşık haritalama tanımları, kayıt, Java 8'in desteği, önbellekte depolama ve statik ve dinamik üretim gibi konularda bunların 70'ten fazla tarifi “İbernament Önerileri: Artı Ortak Karga Sorunlarına 70 Çözüm” kitabımda mevcuttur. Amazon'da cep ve e-kitap ve hibernate-tips.com'da PDF olarak mevcuttur.
()