jackson關於json序列化與hibernate懶載入衝突
阿新 • • 發佈:2019-01-03
一開始用jpa加上jackson自動轉換物件為json資料 前臺用vue覺得很方便
然後做分頁的時候,發現查詢一個物件,會這個物件關聯的表都查詢一遍,這樣就會太慢,然後關聯表也會出問題。
網上看了一些方法 把OneToMany物件設定懶載入 把ManyToOn物件設定EAGER 然後我返回物件的時候發現還是查詢了一對多的表
比如客戶表下面有OneToMany對應的聯絡人表 和 OneToMany對應的合同表 做分頁的時候不用查關聯表的內容
用@JsonIgnore忽略的話 set集合就不能用了 這個方法不可取
設定懶載入測試可以起作用 但是jackson轉換物件為json時會自動訪問關聯表 相當於懶載入沒有起作用
還有就是在表中關於ManyToOne的類屬性 比如客戶表下面的區域表為ManyToOne這個屬性如果設定為懶載入會直接報錯 不能序列化
公司有用Gson手動轉json字串的方法 ,相當於把查詢的物件又包裝了一個類 ,這樣的方法有好幾種,但是很麻煩,每個屬性都需要再重新寫一次,如果屬性未知的話,很難實現。
我的目的就是想在查詢一張表的時候,查詢這個表下面關聯的其他表的第一層資料 不去查詢關聯表下面再關聯的資料。
最後還是把所有ManyToOne 和 OneToMany 都是設定懶載入屬性 這樣ManyToOne會報錯需要給One的實體類上加
@JsonIgnoreProperties(value={"hibernateLazyInitializer","handler","fieldHandler"}) 這個類沒有關聯Many方的資料的時候
就不會查詢json字串為null 有資料的時候會用新的select語句查詢