2016-08-04 34 views
0

當使用Spring-Data-Neo4j-4,似乎一切都默認REST API的CRUD操作被綁定到的Neo4j分配給各個節點和關係類型的內部ID返回。對Neo4j的更改默認ID字段與Spring數據

的問題是,這些ID都沒有真正的價值,用我們的服務,我們正在建設的春天數據的頂級客戶。例如,如果我想刪除一個Person節點,那麼我必須首先執行查詢來檢索內部Neo4j ID(可能是1234年),然後我才能夠針對CRUD API發出DEL調用。

DEL http://myserver/person/1234 

但在我的世界裏,我們根據用戶ID或GUID碼識別我們系統中的Person。可以做些什麼來讓Spring Data使用我們自己的唯一標識符,以便我可以通過使用用戶名moryl作爲ID來進行上述刪除呼叫?這樣可以讓我對我們網絡中其他系統已知ID的用戶進行CRUD操作,而無需再進行額外的呼叫,通過執行MATCH/RETURN查詢將我們所選的ID字段轉換爲Neo4j ID。

有沒有什麼簡單的方法來做到這一點,否則我將不得不重新編寫基本上很多的CRUD功能的方法是春季的數據是用戶?

謝謝。

回答

1

如果你看一下OGM會議的Delete能力,也沒有可能性刪除節點無需專人之前加載它:

interface Delete { 
     <T> void delete(T object); 
     <T> void deleteAll(Class<T> type); 
     void purgeDatabase(); 
     void clear(); 
    } 

但是,您可以使用在你的儲存庫@Query刪除節點基於一個給定的參數,以您的REST API,例如:

//src/main/java/school/repository/StudentRepository 
@Repository 
public interface StudentRepository extends GraphRepository<Student> { 

    @Query("MATCH (s:Student) WHERE s.name = {0} DELETE s") 
    void deleteStudentByName(String name); 

} 

-

//src/main/java/school/controller/StudentController 
@RequestMapping("/api/student/delete/{name}") 
    public void deleteStudent(String name) { 
     studentRepository.deleteStudentByName(name); 
    } 

這將避免加載學生實體。

也就是說,使用自定義ID的策略是爲想,這不是小事,但。