Hibernate中使用未映射为主键的“id”字段进行查询的场景分析
生活随笔
收集整理的這篇文章主要介紹了
Hibernate中使用未映射为主键的“id”字段进行查询的场景分析
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
今天遇到一個hibernate的問題,有一個實體的主鍵字段叫userId,數據庫里的字段名稱是user_id。
然后在某個查詢語句里有這樣一段代碼:
當時看到這段代碼的感覺是應該會報錯吧,因為這個實體并沒有id這個字段,然而事實是不僅可以運行,結果還是正確的。
搜索了下網絡,發現有網友遇到類似的問題,但是沒有找到問題的原因。原帖如下:
跟蹤了一下hibernate的源代碼,發現在hibernate啟動生成映射關系的時候,會先初始化普通字段的映射關系,再初始化主鍵字段的映射關系,如下圖所示:
而這種主鍵字段的初始化,也就是initIdentifierPropertyPaths(mapping)這個方法,不僅會生成userId->user_id的映射關系,還會生成一條id->user_id到映射關系。
至此,問題的原因已經明朗了,我遇到的問題是因為hibernate自動生成了id的映射,所以可以訪問到id屬性。而網友的問題則是,hibernate第二步自動生成的id映射關系覆蓋了第一步普通屬性里id的映射關系。
總結
以上是生活随笔為你收集整理的Hibernate中使用未映射为主键的“id”字段进行查询的场景分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 浅谈最小生成树的算法思路(二)Krusk
- 下一篇: Leet Code OJ 136. Si