2016-06-30 24 views
0
public class Application1{ 
    public static void main(String[] args) { 
     EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("infinite"); 
     EntityManager entityManager = entityManagerFactory.createEntityManager(); 
     /* 
     * 
     * */ 

     Query query = entityManager.createQuery("SELECT key from KeyValue "); 
     org.hibernate.Query hquery = query.unwrap(org.hibernate.Query.class); 
     hquery.setCacheable(true); 

     List<String> list = query.getResultList(); 
     list.forEach(System.out::println); 


     Query query1 = entityManager.createQuery("SELECT key from KeyValue "); 
     org.hibernate.Query hquery1 = query.unwrap(org.hibernate.Query.class); 
     hquery1.setCacheable(true); 

     query.setHint("org.hibernate.cacheable", Boolean.TRUE); 
     List<String> list1 = query1.getResultList(); 
     list1.forEach(System.out::println); 


    } 
} 

Hier muss ich Abfrageklasse auspacken Hibernate, ist es eine andere Möglichkeit, es zu tun, wenn ich JPA verwenden als Spezifikation mit HibernateWie verwende ich JPA-spezifische API für Abfrage-Cache in Hibernate?

+0

keine Ahnung, was das bedeutet. JPA bietet Abfragehinweise zum Festlegen von Herstellerspezifikationen. –

+0

Beispiel, dass ich Ihnen gezeigt habe, ist das nur Abfragecache im Ruhezustand? –

Antwort

0

Nein, Sie können nicht Abfrageergebnis Caching mit einfachen JPA tun.

P.S. Haben Sie die hibernate.cache.use_query_cache="true" in Ihrer Konfigurationsdatei, wenn Sie setCacheable(true) verwenden?

+0

Ja, ich mache, dieser Code funktioniert ordnungsgemäß. Das einzige Problem, das ich habe, möchte ich nicht tun (org.hibernate.Query hquery = query.unwrap (org.hibernate.Query.class diese Entpackung)). –

+0

@MohammadFaizan Unglücklicherweise müssen Sie das Hibernate Query-Objekt verwenden, wie ich in der Antwort-Ebene angegeben habe JPA unterstützt nicht Ergebnismengen-Caching. –

+0

:(Ja, aber es sieht nicht gut aus. –