有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何使用MERGE保存内部对象

现在我使用的是来自graphrespository的save方法,我对用户id也有限制,它是唯一的。用户拥有用户-朋友的列表。 我的流程:

  1. 从数据库读取,如果用户为空,则将其与朋友一起保存,我正在使用graphrespository中的save方法
  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);
    

    但使用合并方法,我无法添加所有用户的好友,而且匹配上的案例也不起作用 enter image description here


共 (1) 个答案

  1. # 1 楼答案

    您可能希望使用类似以下内容的密码查询:

    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 CREATEON MATCH,因为您总是想以任何一种方式做同样的事情。此外,不需要显式地分配id属性,因为MERGE将保证节点将具有所需的id

    我假设friends集合由与user映射具有相同键的映射组成