2016-11-01 5 views
0

На данный момент я использую метод сохранения из GraphRepository, и у меня также есть ограничение на идентификатор пользователя, это уникальный. У пользователя есть Список пользователей - друзей. Мой поток:Как сохранить внутренние объекты с помощью MERGE

  1. чтение из БД, если пользователь является недействительным сохранить его с друзьями, я использую сохранить методом из GraphRepository
  2. Но если пользователь присутствует я просто нужно обновить его и обновить своих друзей. Я использую пользовательский запрос в метод DAO

    @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); 
    

    Но с методом слияния я не могу добавлять друзей все пользовательские и ON MATCH случае не работает слишком enter image description here

ответ

0

Вы, вероятно, хотите использовать запрос Cypher, который выглядит примерно так:

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, так как вы всегда хотите сделать то же самое в любом случае. Кроме того, нет необходимости явно назначать свойство id, так как MERGE гарантирует, что узел будет иметь желаемое значение id.

Я предполагаю, что коллекция friends состоит из карт, которые имеют те же ключи, что и ваша карта user.

+0

Спасибо за ваш ответ, но после слияния это выглядит не так, как я ожидал, посмотрите screanshot выше – Ilya

+0

Вам нужно предоставить дополнительную информацию о параметрах, которые вы использовали, и о том, как вы хотите, чтобы результат выглядел. – cybersam

Смежные вопросы