spring neo4j spring-data-neo4j

spring - Múltiples clases de relación con el mismo tipo



neo4j spring-data-neo4j (1)

Parece que el problema es que la anotación hace que springDataNeo4j priorice el nombre de la relación. Intenté lo mismo en otra muestra que creé. Si ambas anotaciones contienen type="OWNS" , mezcla ambos "objetos". Cuando omito esta información, y solo uso la dirección y el tipo, funciona para mí.

Desafortunadamente, esto generará un problema si está utilizando otra anotación @RelatedTo con más mascotas o automóviles relacionados con otra anotación. Como no difería entre "OWNS" y cualquier otra relación con un Pet-Type, el conjunto devuelve todas las mascotas relacionadas (por ejemplo: peter -> (HATES-Relationsip) -> dogs).

Si es un error o no, no puedo decir ... Pero para la base de datos: solo hay nodos y relaciones. Ambos no están tipeados, por lo que neo4j no sabe nada acerca de su ''Pet''- o'' Car''-Class ''. Spring data neo4j maneja esto, ya sea indexando todos los nodos por tipo y configurando un atributo de tipo, o usando un diseño de gráfico específico (con subreferencias). Incluso si desea buscar todas las mascotas de una persona con una descripción transversal, tendría mucho más código para escribir, ya que las relaciones salientes con el nombre ''OWNS'' contienen dos tipos de objetos.

Yo recomendaría usar dos nombres diferentes. Es más fácil escribir sus cruzadas / consultas personalizadas más tarde, y probablemente sea incluso más rápido, porque no será necesaria una comparación de tipo de clase. ¿Hay alguna razón por la que necesitarías estos nombres específicos?

PD: es posible que no todo sea 100% exacto. No conozco springdataneo4j en detalle, pero eso es lo que descubrí hasta ahora.

Usando spring-data-neo4j, quiero crear dos clases usando @RelationshipEntity(type="OWNS") para vincular una clase Person a un Pet y un Car .

@RelationshipEntity(type="OWNS") public class OwnsCar { @Indexed private String name; @StartNode private Person person; @EndNode private Car car; } @RelationshipEntity(type="OWNS") public class OwnsPet { @Indexed private String name; @EndNode private Person person; @StartNode private Pet pet; }

Esto se guarda correctamente en la Base de Datos de Gráficos sin problemas, ya que puedo consultar el Node y la Relationship reales y ver que escriben , etc.

Pero cuando intento usar @RelatedTo(type="OWNS", elementClass=Pet.class) obtengo una excepción de clase o cuando uso la inicialización @RelatedTo(type="OWNS", elementClass=Pet.class) recibo resultados incorrectos.

@NodeEntity public class Person { @Indexed private String name; @RelatedTo(type="OWNS", direction=Direction.OUTGOING, elementClass=Pet.class) private Set<Pet> pets; @RelatedTo(type="OWNS", direction=Direction.OUTGOING, elementClass=Car.class) private Set<Car> cars; }

El resultado que obtengo cuando intento imprimir nuestra persona (se ha omitido my toString() , pero simplemente llama a toString() para cada campo) es esto:

Person [nodeId=1, name=Nick, pets=[Car [nodeId=3, name=Thunderbird]], cars=[Car [nodeId=3, name=Thunderbird]]]

¿Alguien sabe si esto se puede hacer, se debe hacer, es solo un error o una característica que falta?