2014-12-19 15 views
9

Le query precompilate vengono compilate e memorizzate nella cache in anticipo dal fornitore DB (come oracle, sql server, ecc.) In modo che possano essere più veloci per chiamate successive come istruzione preparata.Le query con nome Hibernate sono precompilate nel vero senso?

In Hibernate Le query con nome vengono precompilate all'avvio del server Web. Significa che tutte le query vengono avviate all'avvio del server stesso in modo che possano essere precompilate dal produttore DB o che la pre-compilazione abbia un significato diverso nel contesto di ibernazione?

risposta

7
  1. query Il Hibernate Named sono espressi in un linguaggio di interrogazione oggetto (JPQL o HQL), in modo da Hibernate ha bisogno di tradurli a SQL prima. Le query denominate sono memorizzate in un NamedQueryRepository e ciascuna query è rappresentata da un NamedQueryDefinition.

    Poiché l'utente può aggiungere in modo dinamico filtri, limiti del risultato della query, blocchi e suggerimenti, Hibernate non può precompilare HQL/JPQL fino al momento dell'esecuzione.

  2. Hibernate utilizza anche un PrepartedStatement per ogni istruzione SELECT e DML modo da poter ottenere un'istruzione di database precompilazione se il driver JDBC supporta e non emula la fase di preparazione per il multiplexing preparare e l'esecuzione in una sola richiesta di database (es. MySQL, PostgreSQL).

+0

Così vlad come hai spiegato nel punto 1, le query con nome non sono precompilate nel vero senso. Concordato quando si usa la dichiarazione preparata in Hibernate, sono precompilati. –

+0

Dopo la prima esecuzione, verrà memorizzato nella cache sia sul lato Java che sul lato DB. Quindi non sarà un problema di prestazioni. –

+0

Aggiornato la mia risposta. Ho sfogliato il codice sorgente e ho scoperto che le query denominate sono tradotte in fase di esecuzione, poiché Hibernate può anche applicare blocchi e filtri. –