hibernate中,方言是解決hql翻譯成sql保證語法的正確,首先數據庫都是支持sql的,不同的數據庫會存在一些語法上面的差異。
HQL則是基於對象的查詢語言,當系統需要數據庫的變換時,那么用hibernate的話就只需要改一改配置文件(修改連接字符串、驅動類、方言等),而用傳統的jdbc時,那么sql語言可能就要有很多改動。
Hibernate底層依然使用SQL語句來執行數據庫操作,雖然所有關系型數據庫都支持使用標准SQL語句,但所有數據庫都對標准SQL進行了一些擴展,所以在語法細節上存在一些差異,因此Hibernate需要根據數據庫來識別這些差異。
舉例來說,我們在MySQL數據庫里進行分頁查詢,只需使用limit關鍵字就可以了;而標准SQL並不支持limit關鍵字,例如Oracle則需要使用行內視圖的方式來進行分頁。同樣的應用程序,當我們在不同數據庫之間遷移時,底層數據庫的訪問細節會發生改變,而Hibernate也為這種改變做好了准備,現在我們需要做的是:告訴Hibernate應用程序的底層即將使用哪種數據庫——這就是數據庫方言。
一旦我們為Hibernate設置了合適的數據庫方言,Hibernate將可以自動應付底層數據庫訪問所存在的細節差異。