java neo4j spring-data-neo4j

neo4j java



DynamicRelationshipType en Spring Data Neo4j o definición de tipos de relación en tiempo de ejecución (1)

¿Puedo especificar el tipo de relación en tiempo de ejecución?

Estoy creando un conjunto de objetos relationshipEntity dentro de una entidad usando algo así como

@Fetch @RelatedToVia(type="RELATED_IN_SOME_WAY", direction = Direction.BOTH) Set<ThingRelationship> relationships = new HashSet<ThingRelationship>();

donde ThingRelationship es

@RelationshipEntity public class ThingRelationship { public ThingRelationship() { super(); } //incremental neo4j set ID @GraphId Long nodeId; //Start and end nodes @StartNode Thing startThing; @EndNode Thing endThing; //Relationship Type @org.springframework.data.neo4j.annotation.RelationshipType String relationship;

Sin embargo, no deseo especificar el tipo de relación ( type = "RELATED_IN_SOME_WAY" ) en tiempo de compilación, sino en tiempo de ejecución. Cuando elimino type = "RELATED_IN_SOME_WAY recibo el error de que debe definirse un tipo predeterminado

En Neo4j ese tipo de relación de tiempo de ejecución creo que requiere el uso de DynamicRelationshipType, pero no creo que Spring Data Neo4j sea compatible con este concepto.

¿Estoy en lo correcto y, de ser así, de todos modos hay algún problema? ¿Debo reemplazar Spring Data Neo4j y usar Core API?


  • En Neo4j ese tipo de relación de tiempo de ejecución creo que requiere el uso de DynamicRelationshipType, pero no creo que Spring Data Neo4j sea compatible con este concepto.

De la documentación de referencia

Nota

Debido a que la información del tipo dinámico es, bueno, dinámica, generalmente no es posible leer el mapeo al revés usando SDN. La relación todavía existe, pero SDN no puede ayudarlo a acceder porque no sabe qué tipo le dio. Además, por este motivo, le solicitamos que especifique un tipo de relación predeterminado, de modo que al menos podamos intentar la asignación inversa.

Entonces, aunque la relación dinámica todavía se crea, no puede usar esa información para recuperar los nodos / relaciones de la base de datos de Neo4j. La relación predeterminada es necesaria para que SDN al menos pueda devolver la relación conocida.

  • ¿Estoy en lo correcto y, de ser así, de todos modos hay algún problema? ¿Debo reemplazar Spring Data Neo4j y usar Core API?

Puede usar la SDN para crear todas las relaciones dinámicas que desee utilizando el @RelationshipType pero no puede recuperarlo utilizando la API predeterminada. Puede usar escribir su propio Cypher o escribir el código transversal y adjuntarlo a su repositorio o propiedad de un nodo usando @Query .