get
比createQuery
有什麼優勢?hibernate createQuery vs
我可以看到有可能在沒有解析HQL輕微的性能改進,但沒有任何其他主要的優勢,使用克服的createQuery?
get
比createQuery
有什麼優勢?hibernate createQuery vs
我可以看到有可能在沒有解析HQL輕微的性能改進,但沒有任何其他主要的優勢,使用克服的createQuery?
首先,這是更快輸入,是更可讀,並明確表達了意圖:通過ID得到的實體。基本上不可能發生錯誤,而在HQL查詢中可能會出現拼寫錯誤。
關於性能,主要優點是隻有當實體不在會話緩存中時才執行select語句。每次都會執行HQL查詢。如果你有二級緩存,如果實體已經在第二級緩存中,get()
將避免完全執行查詢。
get()
直接使用會話來檢索對象。
createQuery()
使用HQL
所以,根據這個,你對'get'的表現不正確:http://stackoverflow.com/questions/5370482/whats-the-advantage-of-load-vs-get-在冬眠。看起來你實際上是在談論「負載」的表現。 – 2013-03-15 06:59:11
沒有。 'get()'看看實體是否在會話緩存中。如果已經存在,則返回。否則,它會執行一個SQL查詢來加載它,將它放入會話緩存中,並將其返回。 'load()'檢查實體是否在會話緩存中。如果已經存在,則返回。否則,它創建一個懶惰的代理,甚至不檢查對象是否存在於數據庫中,並返回此代理。你爲什麼不自己檢查一下?打開SQL日誌記錄,然後進行試驗。 – 2013-03-15 07:02:55
有趣的區別。我在哪裏可以閱讀更多關於此?我找到'get'信息的地方似乎都提到它「總是碰到數據庫」。他們是否都在重複相同的錯誤信息? – 2013-03-15 07:08:11