2016-08-04 274 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的策略是为想,这不是小事,但。