日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

【Hibernate】Hibrenate POJO 类在序列化时遇到的问题

發(fā)布時間:2025/5/22 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Hibernate】Hibrenate POJO 类在序列化时遇到的问题 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

2019獨角獸企業(yè)重金招聘Python工程師標準>>>

假設某 POJO 有屬性如下:

private Set<User> users = new HashSet<>(0);@OneToMany(fetch = FetchType.LAZY, mappedBy = "xuser")public Set<User> getUsers() {return this.users; }

如果我們使用jackson將其序列化,運行時會報錯,myeclipse對宕機:

failed to lazily initialize a collection of role ...

解決方法一: 通過 Hibernate 的 OpenSessionInViewFilter 使得 FetchType 為 LAZY 的屬性在序列化時為空,在 web.xml 中添加代碼如下:

<filter> <filter-name>openSession</filter-name> <filter-class>org.springframework.orm.hibernate4.support.OpenSessionInViewFilter</filter-class> <init-param> <param-name>singleSession</param-name> <param-value>false</param-value> </init-param> </filter> <filter-mapping> <filter-name>openSession</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>

盡管 users 為空,但字段依然保留,對應輸出:

{...,"users":[],...}

解決方法二:

在屬性的 get 方法之前加上注解 @JsonIgnore,如此在轉(zhuǎn)換為 JSON 時該字段被忽略:

import com.fasterxml.jackson.annotation.JsonIgnore; … private Set<User> users = new HashSet<>(0); @JsonIgnore @OneToMany(fetch = FetchType.LAZY, mappedBy = "xuser")public Set<User> getUsers() {return this.users; } …

注意引入的類是 com.fasterxml.jackson.annotation.JsonIgnore,如果使用 org.codehaus.jackson.annotate.JsonIgnore 則不能生效,見 Spring @JsonIgnore not working 。

解決方法三:

fetch = FetchType.LAZY 改為 fetch = FetchType.EAGER,但這樣會導致每次查詢數(shù)據(jù)庫都要立即提取 OneToMany 的所有對象,所以非常不推薦。

轉(zhuǎn)載于:https://my.oschina.net/whitejavadog/blog/877286

《新程序員》:云原生和全面數(shù)字化實踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結(jié)

以上是生活随笔為你收集整理的【Hibernate】Hibrenate POJO 类在序列化时遇到的问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。