天天看點

關于hibernate執行createSQLQuery時字段重名的問題

海闊憑魚躍,天高任鳥飛!

關于hibernate執行createSQLQuery時字段重名的問題

        前些天做了一個小項目,主要做日志評估這塊,由于各種的查詢用于計算過于複雜,某些查詢用hql很難實作,是以用了hibernate自帶的createSQLQuery方法。前幾天忙于編碼,也沒做測試,昨天找了些資料,做些調試,還算ok,無意中看到某些字段的值竟然是一樣的,然後就各種的調試,從資料庫中取到的元素值竟然是一樣的,然後便嘗試用原始的SQL語句進行查詢,結果是SQL查詢正确,hibernate取值錯誤,郁悶之極啊!怎麼辦?涼拌呗!從網上找各種資料,嘗試了N種方法,無果而終!

       大家的解決方案無非以下幾種:

              1.改成hql語句(這個首先否定,因為關聯的表太多,用到的函數也很多)

              2.用addEntity加以區分(這個試了幾次,很繁瑣,無果而終)

              3.執行jdbc(最後的招了,改很容易,但是應該還有更容易的解決方案吧)

        哥們用第二種方案調了一晚上,又累有頭暈,果斷放棄。究其原因:幾個表裡的字段有相同的值,hibernate取值設值用的是get,set方法,如果有相同的字段,它區分不了。

       其他方法都不行,怎麼辦?還是最後一招吧。改成jdbc後,RowSet傳回值後,竟然也是同樣的問題。Oh,My God!

       哥們當時就崩潰了,你媽的後招被封死了。由于沒有可參考的執行個體,哥們突發奇想,用子查詢把重名的字段as一下,然後調了一下,通過,OK!

       總結:

                   1.hibernate執行sql原理,字段的set、get.

                  2.重名字段的解決方案,子查詢把重名的替換掉

                  3.資料庫設計的時候最好不要重名,要充分地考慮實作

                  4.某些問題的解決,還是從原理上入手,網絡不是萬能的,得有自己的思想

                  5.重視細節