2015-09-17 24 views
1

如果我有豐富的關係實體,例如如何CRUD @RelationshipEntity在SDN 4.0

@NodeEntity 
public class Actor { 
    Long id; 
    private Role playedIn; 
} 

@RelationshipEntity(type="PLAYED_IN") 
public class Role { 
    @GraphId private Long relationshipId; 
    @Property private String title; 
    @StartNode private Actor actor; 
    @EndNode private Movie movie; 
} 

@NodeEntity 
public class Movie { 
    private Long id; 
    private String title; 
} 

要CRUD都@NodeEntity,只是簡單地創建每個@Repository,例如

@Repository 
public interface ActorRepository extends GraphRepository<Actor>{ 

} 

到做CRUD只是

@Autowired 
ActorRepository actorRepository 

actorRepository.save(new Actor(....)) 

我的問題是,我們如何爲做CRUDRole

我們是否爲Role創建了一個@Repository? (我試過了,它不起作用)

回答

3

MicTech是對的。

RelationshipEntity由圖中的邊而不是節點表示,目前Repository實現僅適用於可以作爲節點持久保存的對象。這不應該導致你任何問題。

OGM將持續保存所有可訪問的對象,除非您明確保存(除非您不告知)。這種行爲意味着每當保存NodeEntity時,連接對象之間的邊將自動創建/更新,無論這些邊是由RelationshipEntity顯式表示還是由NodeEntity實例間的直接引用隱式表示。

的OGM的會議目的是使用SDN的在庫方法時略顯限制較少,你可以標註爲RelationshipEntity的對象上調用

session.save(...)

,和您預期的那樣就行了。但是,實際上不需要這麼做:保存RelationshipEntity的開始節點或結束節點將確保圖形正確保持。

+0

感謝您的詳細信息。這真的很有幫助。 – jasonfungsing

1

SDN會自動爲@RelationshipEntity執行CRUD,因爲您無法在沒有開始和結束節點的情況下將關係存儲在Neo4j中。

+0

我確實先保存了一個Actor和一個Movie,然後試圖用startNode actor和endNode movie保存角色。 – jasonfungsing