2015-04-23 34 views
0

我想弄清楚爲什麼傑克遜JSON序列化的250個對象的集合需要40秒,我想我已經縮小到SDN懶加載。我正在使用@Fetch,但它仍然好像它向數據庫詢問集合中每個節點的每個屬性的委託。請忽略任何拼寫錯誤,因爲我不得不手動輸入此複製粘貼不是一個選項。放心,班級按預期進行編輯。 (簡化)班正在連載:春季數據Neo4J @Fetch問題與傑克遜序列化看到

@NodeEntity 
public class NodeWithDelegate { 

    @RelatedTo(type="REL_NAME", direction=Direction.OUTGOING) 
    @Fetch private DelegateNode delegate; 

    private DelegateNode getInitializedDelegate() { 
    if (delegate == null) { 
     delegate = new DelegateNode(); 
    } 
    return delegate; 
    } 

    public String getDelegateAttribute1() { 
    return delegate == null ? null : delegate.getAttribute1(); 
    } 

    public void setDelegateAttribute1(String attribute1) { 
    getInitializedDelegate().setAttribute1(attribute1); 
    } 

    .... 

    public String getDelegateAttribute15() { 
    return delegate == null ? null : delegate.getAttribute15(); 
    } 

    public void setDelegateAttribute15(String attribute15) { 
    getInitializedDelegate().setAttribute15(attribute15); 
    } 
} 

DelegateNode類正是你所期待的,只是含15字符串或整數或布爾屬性的簡單@NodeEntity POJO。

所以兩個問題真的:

  1. 我怎麼能告訴不確定的對象實際上是被即時加載?我正在使用eclipse。
  2. 爲了調試的目的,如果對象都被急切地加載,並且在從數據庫獲取集合和調用所有委託獲取器的序列化程序之間放置一個斷點,並且在暫停關閉數據庫時它應該工作嗎?如果對象需要與數據庫進行交談,是否有任何理由,如果其全部急切加載?

我想我應該提一下,我正在使用其餘的api for neo4j。

非常感謝提前!

回答

0

我假設您使用Spring Data Neo4j的3.x版本。

該版本對於REST API並不是非常優化的。如果您啓用密碼查詢的日誌記錄,您將看到很多。舉例log4j的:

log4j.category.org.springframework.data.neo4j.support.query=DEBUG 

您可以使用自定義查詢暗號,結果與@QueryResult標註製圖解決此限制。

  1. 使用記錄,你應該看到加載

  2. 它應該你的對象,除非在DelegateNode本身的東西「懶」。

+0

我是。我正在調查4.0.0.M1目前在一個分支,這是一個巨大的事業。但它似乎更適合我們的應用程序和我們用REST API找到的限制。只是希望我知道預計的GA日期將會是什麼時候。 – guydog28

+0

呵呵,在DelegateNode中只有屬性沒有什麼懶,但是當我關閉neo4j服務器時,當它試圖從NodeWithDelegate調用getDelegateNode時,我得到一個連接異常,對我而言,它表示它試圖與數據庫。 – guydog28