neo4j 迴圈引用問題

2021-10-01 21:18:18 字數 1647 閱讀 6596

背景:

使用spring-data-neo4j 進行crud 資料。在進行大批資料入庫時,資料入庫到一半,突然提示

neo.transienterror.network.communicationerror"; code: neo.transienterror.network.communicationerror; description: can not start an object, expecting field name
本次實體是(已經真實資訊進行處理):

@getter

@setter

@tostring

@nodeentity

(label =

"person"

)public

class

person

implements

comparable

@getter

@setter

@relationshipentity

(type =

"standard"

)public

class

standard

開始還以為是有髒資料,比如有空的,非法的資料,先對資料進行排查過濾處理,保證入庫的資料關鍵字段都是合法的。重試。發現問題依舊存在。

經過排查發現。每當我建立@relationshipentity時,在dubug 檢視資料時可以會在將圖形序列化為json時遇到無限遞迴。

雖然通過 @jsonbackreference 避免了序列化,但是貌似還是不生效。當少量的資料時,序列化正常。當資料量大時,跑到一半就報can not start an object, expecting field name。

通過查閱相關的資料,發現使用jsog嘗試呈現圖形只會導致不同的,格式錯誤的json響應。

最後看到github 的小demo (

這個demo 演示使用小測試用例呈現迴圈資料的問題。

最終是通過 使用@jsonignore注釋或配對:@jsonbackreference和@jsonmanagedreference

解決迴圈資料的問題。

最後實體是:

@getter

@setter

@relationshipentity

(type =

"standard"

)public

class

standard

補充知識:

@jsonmanagedreference和@jsonbackreference 序列化時,

@jsonbackreference標註的屬性在會被忽略。

@jsonmanagedreference標註的屬性則會被序列化。

在序列化時,@jsonbackreference的作用相當於@jsonignore,此時可以沒有@jsonmanagedreference。

反序列化時,如果沒有@jsonmanagedreference,則不會自動注入@jsonbackreference標註的屬性(被忽略的父或子);如果有@jsonmanagedreference,則會自動注入自動注入@jsonbackreference標註的屬性。

Neo4j學習(2) Win系統安裝Neo4j

neo4j 是目前最流行的圖形資料庫,支援完整的事務,在屬性圖中,圖是由頂點 vertex 邊 edge 和屬性 property 組成的,頂點和邊都可以設定屬性,頂點也稱作節點,邊也稱作關係,每個節點和關係都可以由乙個或多個屬性。neo4j建立的圖是用頂點和邊構建乙個有向圖,其查詢語言cypher...

Neo4j檔案說明

neo4j作為資料庫式的nosql工具,檔案儲存也有其獨特方面。neostore neostore.id 儲存版本資訊 neostore.nodestore.db neostore.nodestore.db.id 儲存節點資料與節點序列id neostore.propertystore.db neo...

Neo4j學習筆記

neo4j學習筆記 一.基本知識 1.1 node syntax 節點語法 matrix movie matrix movie matrix movie matrix movie 1 代表乙個節點uncharacterized node 2 matrix 新增了乙個變數為matrix的節點。3 mo...