Ho rilevato un problema di prestazioni con le query hibernate e native su Oracle. Quando eseguo una query SQL complessa con diversi parametri su TOAD, ottengo il risultato in millisecondi. Tuttavia, quando eseguo la stessa query utilizzando Hibernate questa volta viene incrementato enormemente (fino a quattro secondi o anche più).Prestazioni lente su Hibernate + Java ma veloce quando utilizzo TOAD con la stessa query Oracle nativa
La mia query SQL è piuttosto complessa, restituisce un valore univoco (quindi, il problema non è correlato con il tempo necessario alle classi di installazione) e contiene diversi parametri con il formato ': nameParameter'. Questa query è archiviata in una stringa. Ad esempio,
String myNamedNativeQuery = "select count(*) from tables "+
"where column1 = :nameParameter1 "+
"and column2 = :nameParameter2";
//actually my sentence is much more complex!!
Quando si esegue la frase su TOAD, viene risolto in pochi millisecondi. Ma usando questa frase con Hibernate
SQLQuery query = session.createSQLQuery("myNamedNativeQuery");
query.setParameter(nameParameter1, value1);
query.setParameter(nameParameter2, value2);
query.uniqueResult();
sono necessari diversi secondi per ottenere lo stesso risultato.
Mi sono reso conto che se ho sostituito i parametri direttamente sulla query nativa e poi eseguo la frase utilizzando Hibernate il tempo diminuisce drasticamente. Sarebbe qualcosa del genere:
String strQuery = session.getNamedQuery("myNamedNativeQuery").getQueryString();
myNamedNativeQuery = myNamedNativeQuery.replace("nameParameter1", value1);
myNamedNativeQuery = myNamedNativeQuery.replace("nameParameter2", value2);
SQLQuery query = session.createSQLQuery("myNamedNativeQuery");
query.uniqueResult();
Qualcuno sa cosa sta succedendo ??
Grazie in anticipo.
PS: La versione di Oracle è 9i e Hibernate 3.2
turno dell'opzione "mostra sql" con ibernazione. Ti mostrerà la query di ibernazione in corso e ti fornirà informazioni sul motivo per cui è necessario così tanto tempo. –