Hibernate crea query HQL

2

Ho appena letto il riferimento di ibernazione e dicono che dovresti usare i constans per le query HQL. Tuttavia, ciò non è sempre possibile, ad esempio se si esegue una funzione di ricerca e si hanno 10 criteri (non i criteri jpa, solo le colonne che si stanno cercando). Scommetto che puoi fare un HQL hacky che si trasforma in SQL male performante, ma ritengo che non sia la scelta migliore.

So che puoi utilizzare l'API Criteria, ma non è così potente come HQL e alcune persone semplicemente non gli piacciono (sono uno di loro).

Come lo fai nelle tue applicazioni?

Intendo codice simile (è solo un esempio!)

String hql = "from Biuro where ";
List parameters = ...
if (dateFrom!=null){
   hql += " dateFrom>=? ";
   parameters.add(dateFrom);
}
    
posta IAdapter 15.04.2011 - 14:34
fonte

1 risposta

1

È possibile utilizzare i parametri (ad esempio ": orderNumber"), che verranno compilati in PreparedQuery. Lo svantaggio è che in alcuni database (ad esempio PostgreSQL), un piano di esecuzione di query viene costruito durante la preparazione della query. Ciò significa che non può utilizzare le statistiche di distribuzione del valore (poiché i valori dei parametri non sono noti durante la preparazione della query) e in alcuni casi può produrre un piano di esecuzione non ottimizzato.

Non so perché il riferimento all'ibernazione suggerisce quella cosa, stiamo usando ampiamente i parametri in HQL nel nostro progetto, e stiamo usando ampiamente l'API dei criteri. Il motto è non ottimizzare finché non hai qualcosa da ottimizzare . Prima crea l'applicazione e poi controlla se ci sono alcuni problemi di prestazioni che puoi eliminare usando le costanti.

    
risposta data 15.04.2011 - 18:08
fonte

Leggi altre domande sui tag