Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring Data Neo4J-创建与现有节点具有关系的新节点_Neo4j_Spring Data Neo4j_Spring Data Neo4j 4 - Fatal编程技术网

Spring Data Neo4J-创建与现有节点具有关系的新节点

Spring Data Neo4J-创建与现有节点具有关系的新节点,neo4j,spring-data-neo4j,spring-data-neo4j-4,Neo4j,Spring Data Neo4j,Spring Data Neo4j 4,我需要创建一个类a的新节点,它与用户节点有关系: @NodeEntity public class A implements Serializable { /** * Graph node identifier */ @GraphId private Long nodeId; /** * Enity identifier */ private String id; //... more properti

我需要创建一个类a的新节点,它与用户节点有关系:

@NodeEntity
public class A implements Serializable {

    /**
     * Graph node identifier
     */
    @GraphId
    private Long nodeId;

    /**
     * Enity identifier
     */
    private String id;

    //... more properties ...

    @Relationship(type = "HAS_ADVERTISER", direction = Relationship.OUTGOING)
    private User user;

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (!(o instanceof IdentifiableEntity)) return false;

        IdentifiableEntity entity = (IdentifiableEntity) o;
        if (!super.equals(o)) return false;

        if (id != null) {
            if (!id.equals(entity.id)) return false;
        } else {
            if (entity.id != null) return false;
        }

        return true;
    }


}


@NodeEntity
public class User implements Serializable {

    /**
     * Graph node identifier
     */
    @GraphId
    private Long nodeId;

    /**
     * Enity identifier
     */
    private String id;

    //... more properties ...


    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (!(o instanceof IdentifiableEntity)) return false;

        IdentifiableEntity entity = (IdentifiableEntity) o;
        if (!super.equals(o)) return false;

        if (id != null) {
            if (!id.equals(entity.id)) return false;
        } else {
            if (entity.id != null) return false;
        }

        return true;
    }

}
现在,假设我们有新节点A的以下数据:

{
  "id": 1,
  "nodeId": "0001-0001",
  "user": {
           "id": 4,
           "nodeId": "0002-0002",
           "name": null,
           "firstName": null
          }
}
我试图创建节点A,使新节点A与具有“id”:4和“nodeId”:“0002-0002”(唯一节点标识符)的用户的(现有)节点之间具有关系,但用户节点将字段“name”和“firstName”更新为
null

我正在使用GraphRespository代理创建它:

@Repository
public interface ARepository extends GraphRepository<A> {


}
@存储库
公共接口ARepository扩展了GraphRespository{
}

有没有办法不进行此更新,只与用户节点建立关系?

没有,您必须按id重新加载实体以填充所有缺少的值,然后保存,或者编写自定义查询

您可以通过
合并
来完成。见

@存储库
公共接口ARepository扩展了GraphRespository{
@查询(“合并(a:a{id:aId}})-[:HAS_广告客户]-(u:User{id:{userId}})”+
“返回a”)
public A createAndGetAd(@Param(“aId”)字符串辅助,
@参数(“用户ID”)字符串(用户ID)
}

感谢您的回复!
@Repository
public interface ARepository extends GraphRepository<A> {

    @Query("MERGE (a:A {id:aId}})-[:HAS_ADVERTISER]-(u:User {id:{userId}})" +
           "RETURN a")
    public A createAndGetAd(@Param("aId") String aId,
                            @Param("userId") String userId)
    }