0
我在hibernate中有一個查詢,我相信這是因爲在這裏討論的驅動程序和MsSql中的VARCHAR和NVARCHAR差異Getting Hibernate and SQL Server to play nice with VARCHAR and NVARCHAR。我明白這個問題不在Hibernate中,但是由於hibernate處理下面的代碼而感到困惑。當我們運行下面的查詢(使用set參數並且沒有它)時,在列'code'的VARCHAR列類型的數據庫中,我們發現在HQL中追加字符串的速度比setParameter(或Criteria Query這應該比HQL更快)。VarChar MsSql列上的各種Hibernate查詢的性能差異
Query createQuery = session.createQuery("from abc where code='"+substring+"'");
/*Query createQuery = session.createQuery("from abc where code=:substring");
createQuery.setParameter("substring","Test");*/
return createQuery.list();
請讓我知道這將有所作爲。
但爲什麼我的標準查詢更慢? 。我很困惑,因爲設置sendStringParametersAsUnicode = false給了我類似於我追加參數的查詢的性能。 HQL中的setParameter似乎與Criteria具有相同的性能。那麼,是直接將參數追加到Query中,以幫助克服數據庫問題中的VARCHAR? –
如果在HQL查詢中沒有任何參數(即,當您使用字符串連接並且不必在查詢上調用setParameter),那麼JDBC驅動程序沒有任何要發送的參數。在這種情況下,sendStringParametersAsUnicode是不相關的。當你有一個參數化的HQL查詢時,或者當你使用Criteria API時,Hibernate會生成預處理語句,然後JDBC驅動程序發送參數。在這種情況下,sendStringParametersAsUnicode是相關的。 –
@Nizet:現在我明白了。非常感謝。 –