自己寫的代碼覆蓋hibernate中的代碼
翻了翻源碼發現,很多地方都是使用LinkedHashMap或者是List來傳輸Entity里面的fields,于是感覺Hibernate應該是考慮到使用Entity里面定義的fields的順序來實現建表語句里的表字段順序的。?
于是就一步步跟蹤下去,終于在一個地方發現了一個問題:org.hibernate.cfg包下的PropertyContainer類在取fields的時候是使用TreeMap來保存的,于是試著改了下,將這個里面的所有TreeMap改成了LinkedHashMap,編譯通過,打包,測試。?
終于,我們期待已久的結果出來了:建表語句里面的字段順序和Entity里面的fields的順序一致了。
在自己的項目中新建一個
org.hibernate.cfg的包
新建類PropertyContainer。
根據原理,如果用戶自定義的類與Jar中同名,會優先使用 用戶自定義的類。這樣就可以覆蓋原來的Hibernate的行為
有的版本,是替換4個地方
將TreeMap替換為 LinkedHashMap
重新編譯之后,數據庫中的字段順序就與實體類的順序一樣
這樣處理的之后,尤其在Excel數據導入的時候,會非常的方便核對數據。