2016-11-01 9 views
0

今のところ私はGraphRepositoryからsaveメソッドを使用していますが、ユーザーIDには制約もあります。ユニークです。ユーザーには、ユーザーのリスト - フレンドがあります。私の流れ :、MERGEで内部オブジェクトを保存する方法

  1. 読むデシベルから、ユーザーが自分の友達と一緒に保存nullの場合、私はGraphRepository
  2. から保存方法を使用しています。しかし、ユーザーが存在する場合、私はちょうど彼を更新する必要があり、彼の友人を更新する。 私は

    @Query("MERGE (u:User {id:{user}.id}) " + 
        "ON CREATE SET u.id = {user}.id, u.firstName={user}.firstName, u.lastName={user}.lastName, u.imgUrl = {user}.imgUrl " + 
        "ON MATCH SET u.id += {user}.id, u.firstName+={user}.firstName, u.lastName+={user}.lastName, u.imgUrl += {user}.imgUrl") 
    void mergeUser(@Param("user") User user); 
    

    しかし、マージ方法で私はMATCH上のすべてのユーザの友人とを追加することはできませんが、場合は、おそらくあまりにも enter image description here

答えて

0

あなたが動作しないDAOメソッドにカスタムクエリを使用しています

MERGE (u:User {id:{user}.id}) 
SET u.firstName = {user}.firstName, u.lastName = {user}.lastName, u.imgUrl = {user}.imgUrl 
WITH u 
UNWIND {friends} AS friend 
MERGE (f:User {id:{friend}.id}) 
SET f.firstName = {friend}.firstName, f.lastName = {friend}.lastName, f.imgUrl = {friend}.imgUrl 
MERGE (u)-[:FRIEND_OF]->(f); 

ありがとうございますON CREATEまたはON MATCHを使用する必要があります。なぜなら、常に同じことをやりたいからです。また、プロパティに明示的に割り当てる必要はありません。MERGEは、ノードが希望のid値を持つことを保証するためです。

friendsコレクションは、userマップと同じキーを持つマップで構成されているとします。

+0

あなたの答えをありがとう、しかし、私は期待どおりに見えない、マージ後に – Ilya

+0

のscreanshotを見てくださいあなたは、あなたが使用したパラメータについての詳細な情報を提供する必要があります。 – cybersam

関連する問題