2016-08-04 11 views
0

Spring-Data-Neo4j-4を使用すると、デフォルトのREST APIのCRUD操作で返されるものは、Neo4jがさまざまなノードおよび関係タイプに割り当てる内部IDに結びついているようです。Neo4jでSpringデータを持つデフォルトIDフィールドを変更する

問題は、これらのIDは、私たちがSpring Dataの上に構築している私たちのサービスを使用するクライアントにとって本当の価値がないことです。たとえば、Personノードを削除する場合は、まず内部Neo4j ID(おそらく1234)を取得するためのクエリを実行する必要があります。次に、CRUD APIに対してDEL呼び出しを発行できます。

DEL http://myserver/person/1234 

私の世界では、ユーザIDまたはGUIDコードに基づいてシステム内のPersonを認識します。 Spring Dataに固有のIDを使用させるためには、IDとしてmorylというユーザー名を使用して上記の削除呼び出しを行うことができますか?これにより、私たちのネットワーク内の他のシステムに知られているIDを持つユーザーに対してCRUDを実行させ、MATCH/RETURNクエリを実行して、選択したIDフィールドをNeo4j IDに変換する追加の呼び出しを行う必要がなくなります。

これを行う簡単な方法はありますか、またはSpring DataがユーザーであるCRUD機能メソッドを基本的に書き直す必要がありますか?

ありがとうございました。

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

あなたはしかし、ノードを削除するためのリポジトリで@Queryを使用することができます。

答えて

1

あなたはOGMセッションのDelete機能を見れば、手の前にそれをロードせずにノードを削除するには何の可能性もありません例えば、あなたの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); 
    } 

これは、Studentエンティティをまったく読み込まないようにします。

つまり、カスタムID戦略を使用していると考えられていますが、これは些細なことではありません。

関連する問題