2015-12-15 119 views
4

我試圖從Spring Data Neo4J 3升級到4 - 我使用的是Neo4J 2.2.2。Spring Data Neo4J 4 - no template.fetch()

我使用GraphRepository實例來查詢數據庫,取回對象。

該對象有幾個關係,這些關係不會被提取(故意避免在整個圖表中讀取)。

在SDN3代碼中,只需使用Neo4JTemplate類爲我需要獲取的每個關係執行獲取調用。這工作非常好。

但是,在SDN4中,該工具已被刪除,並由load()方法的各種實現取代。從文檔中不清楚如何實現我在SDN3中所做的工作。

要清楚的是:如果我有一組對象在第一個類中檢索,由關係控制,我只想檢索該Set中的對象,而不是數據庫中這些對象的整個集合。

我在升級過程中遺漏了一些至關重要的東西,還是有一種簡單的方法來做我想做的事情?

添加代碼:

我的實體類:

@NodeEntity 
public class File implements MetroNode { 

    private Long id; 

    private String fileName; 

    private SourceState sourceState; 

    private Set<State> states; 

    @GraphId 
    public Long getId() { 
     return id; 
    } 

    public void setId(Long id) { 
     this.id = id; 
    } 

    public String getFileName() { 
     return fileName; 
    } 

    public void setFileName(String fileName) { 
     this.fileName = fileName; 
    } 

    @Relationship(type = "HAS_FILE", direction = Relationship.INCOMING) 
    public SourceState getSourceState() { 
     return sourceState; 
    } 

    public void setSourceState(SourceState sourceState) { 
     this.sourceState = sourceState; 
    } 

    public State addState(MetroNode otherNode, StateStatus status) { 
     if (this.states == null) { 
      this.states = new HashSet<State>(); 
     } 
     State state = new State(this, otherNode, status.toString()); 
     this.states.add(state); 
     return state; 
    } 

    @Relationship(type = "HAS_STATE", direction = Relationship.OUTGOING) 
    public Set<State> getStates() { 
     return states; 
    } 

    public State getActiveState() { 
     if (this.states != null) { 
      for (State state : this.states) { 
       if (state.isActive()) { 
        return state; 
       } 
      } 
     } 
     return null; 
    } 

} 

我的倉儲類:

public interface FileRepository extends GraphRepository<File> { 

    File findByFileName(String fileName);  
} 

執行getActiveState()方法,我得到一個空返回時,因爲根據國家制定的是空的(尚未被提取)。

再次看我的代碼,我不知道是否因爲我沒有使用從存儲庫「本機」加載方法,但重載的版本?

回答

0

SDN 4允許您使用persistence horizon控制相關實體的加載。

加載一個深度爲0的實體將獲取實體的屬性,並且沒有相關的實體。 深度1將獲取相關實體的第一層,但不涉及它們之間的關係等。

不支持通過關係類型來控制深度。

+0

感謝您的快速回復。我讀過你鏈接到的文檔,它包含這個句子「默認情況下,加載一個實例將映射該對象的簡單屬性及其與直接相關的對象(即depth = 1)。」這似乎並不是我的情況應用程序,其中由關係指定的對象的集合未被填充。我誤解了這裏的情況嗎? – TrueDub

+0

這聽起來不對。默認深度1應加載相關對象。你能用調試日誌中的一些代碼或測試以及任何感興趣的線更新你的問題嗎? – Luanne

+0

添加了代碼 - 感謝所有幫助,謝謝。 – TrueDub