Spring Data Neo4J-创建与现有节点具有关系的新节点
我需要创建一个类a的新节点,它与用户节点有关系: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
@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)
}