una - Convención de nomenclatura para relaciones bidireccionales en Neo4j(utilizando Spring Data)
tipos de comunicacion bidireccional y unidireccional (1)
No hay relaciones bidireccionales en Neo4j. Cada relación tiene un nodo de inicio y un nodo final. Dicho esto, puede optar por ignorar esa dirección al escribir recorridos, utilizando efectivamente la relación como bidireccional.
Lo que intentas modelar es personas que poseen autos. (persona) - [: OWNS] -> (automóvil) significa dos cosas: desde el punto de vista de la persona, esta relación saliente muestra que la persona es dueña del automóvil. Desde el punto de vista del automóvil, la misma relación (pero entrante) significa que es propiedad de la persona.
La anotación @RelatedTo en SDN usa Direction.OUTGOING de manera predeterminada, si no se especifica ninguna dirección. Esta es la razón por la que podría haber pensado que estas relaciones son bidireccionales, pero no lo son; están SALIENDO por defecto.
Así que modelaría su dominio así:
@NodeEntity
public class Person {
@Indexed
private String name;
@RelatedTo(type="OWNS", direction=Direction.OUTGOING) //or no direction, same thing
private Set<Car> cars;
}
@NodeEntity
public class Car {
@Indexed
private String description;
@RelatedTo(type="OWNS", direction=Direction.INCOMING)
private Person person;
}
Necesito algunos consejos para dar nombre a las relaciones. Además, no estoy seguro de cómo tengo que anotar las entidades de mi dominio con los datos de primavera. La mayoría de los ejemplos que he visto son unidireccionales y el nombre elegido es bastante sencillo.
Elija el siguiente ejemplo:
@NodeEntity
public class Person {
@Indexed
private String name;
@RelatedTo(type="OWNS", direction=Direction.OUTGOING)
private Set<Car> cars;
}
El nombre de la relación parece estar bien, no hay problema.
Ahora supongamos que quiero hacer que esta relación sea bidireccional. ¿Cuáles son las diferencias (y los pros / contras) de los siguientes enfoques?
1) Haga que ambos lados de la dirección de relación = Dirección.HERO y llame a la relación tipo = "PROPIEDAD"?
@NodeEntity
public class Person {
@Indexed
private String name;
@RelatedTo(type="OWNERSHIP", direction=Direction.BOTH)
private Set<Car> cars;
}
@NodeEntity
public class Car {
@Indexed
private String description;
@RelatedTo(type="OWNERSHIP", direction=Direction.BOTH)
private Person person;
}
2) Usa dirección en ambos lados?
@NodeEntity
public class Person {
@Indexed
private String name;
@RelatedTo(type="OWNS", direction=Direction.OUTGOING)
private Set<Car> cars;
}
@NodeEntity
public class Car {
@Indexed
private String description;
@RelatedTo(type="OWNED_BY", direction=Direction.INCOMING)
private Person person;
}