Saya pikir apa yang terjadi dengan kode ini :
SQLQuery query = session.createSQLQuery("myNamedNativeQuery");
query.setParameter(nameParameter1, value1);
query.setParameter(nameParameter2, value2);
query.uniqueResult();
apakah ini:
di baris 1 :rencana kueri dibuat berdasarkan beberapa nilai yang diharapkan untuk parameter yang Anda beri nama.
di baris 4:kueri dieksekusi dengan nilai1 dan nilai2, tetapi nilai-nilai itu bukan "nilai bagus" untuk rencana kueri yang diuraikan pada baris 1 dan seterusnya, database menjalankan rencana yang sangat tidak tepat untuk nilai aktual dan dibutuhkan banyak waktu.
Mengapa ?
Melihat kode sumber HibernateSessionImpl.createSQLQuery(...)
Saya menemukan baris kode ini:
SQLQueryImpl query = new SQLQueryImpl(
sql,
this,
factory.getQueryPlanCache().getSQLParameterMetadata( sql )
);
yang memanggil getQueryPlanCache()
dengan beberapa parameterMetaData. Saya berasumsi bahwa metadata ini tidak cukup baik .