Как объединить два существующих узла в neo4j, используя Spring, OGM и @RelationshipEntity - PullRequest
0 голосов
/ 09 апреля 2020

Я использую Spring neo4j ogm, и у меня уже есть объекты, сохраненные в базе данных. Теперь я хочу создать новые отношения между ними с весенним огом. Проблема в том, что у меня есть только сущности uuid в данный момент, и я хочу избежать getEntityByUuid (), который может получить объект сущности, а затем repo.save () сделает свое дело.

Если мне нужно создать пользовательский запрос, может ли он быть в хранилище в следующем формате:

public interface EntityRepository extends Neo4jRepository<Entity, Long> {
    @Query("MATCH (e:Entity {uuid:$0}), (e2:Entity{uuid:$1}) CREATE (e)-[:MENTION{relationshipProperties...}]->(e2)")
    boolean createRelationshipBetweenExistingEntities(String  entity1uuid, String  entity2uuid, RelationshipNeo4j rel);

Это мои классы:

public abstract class AbstractEntity {
@Id
@GeneratedValue
private Long id;
}
@RelationshipEntity(type = "MENTION")
public class RelationshipNeo4j extends AbstractEntity {
@Property
protected String type;
@Property
protected LocalDate date;
@StartNode
protected Entity start;
@EndNode
protected Entity end;
}

@NodeEntity
public class Entity extends AbstractEntity {
protected String name;
@Index(unique = true)
protected String  uuid;
protected String wikiURL;
protected String  description;
@Relationship(type="MENTION")
protected List<RelationshipNeo4j> relationships;
}

1 Ответ

0 голосов
/ 09 апреля 2020

Это самое близкое, что я получил:

@Query("MATCH (e:Entity {uuid:{entity1uuid}}), (e2:Entity{uuid:{entity2uuid}}) CREATE (e)-[r:MENTION{uuid:{relationshipUuid},type:{type},date:{date}}]->(e2) RETURN e,e2,r")
RelationshipNeo4j createRelationshipBetweenExistingEntities(String  entity1uuid, String  entity2uuid, String  relationshipUuid, String  type, String date);

Мы не можем вставить в запрос не примитивные типы: https://markhneedham.com/blog/2017/12/01/neo4j-cypher-property-values-can-primitive-types-arrays-thereof/

...