relaciones - manual neo4j
No se puede agregar más de una relación entre nodos en neo4j (1)
Esto no es una deficiencia de Neo4j, es una restricción de Spring Data Neo4j.
Por lo general, si tiene diferentes tipos de relaciones, tendría sentido elegir también diferentes tipos de relación, y no usar una propiedad de relación para esto.
CONNECTED_TO
también es bastante genérico.
Id
también es una clase bastante genérica, ¿no debería ser User
o algo similar?
FRIEND
COLLEAGUE
etc. sería más significativo.
Dicho esto, si quieres permanecer en tu modelo, puedes usar
template.createRelationshipBetween(entity1,entity2,type,properties,true)
Lo true
significa permitir-duplicar.
Alternativamente, use dos tipos de objetivos diferentes para los 2 tipos de relaciones y uso
@RelatedTo(enforceTargetType=true)
Estoy tratando de modelar una red social con Neo4J. Esto requiere que un usuario pueda tener relaciones múltiples con otro usuario. Cuando trato de persistir en estas relaciones, solo se almacena una. Por ejemplo, esta es la unidad de prueba que hago:
@Test
public void testFindConnections() {
Id id1 = new Id();
id1.setId("first-node");
Id id2 = new Id();
id2.setId("second-node");
idService.save(id2);
id1.connectedTo(id2, "first-rel");
id1.connectedTo(id2, "second-rel");
idService.save(id1);
for (Id im : idService.findAll()) {
System.out.println("-" + im.getId());
if (im.getConnections().size() > 0) {
for (ConnectionType ite : im.getConnections()) {
System.out
.println("--" + ite.getId() + " " + ite.getType());
}
}
}
}
Esto debería dar como resultado:
-first-node
--0 first-rel
--1 second-rel
-second-node
--0 first-rel
--1 second-rel
Sin embargo, produce:
-first-node
--0 first-rel
-second-node
--0 first-rel
Esta es mi entidad de nodo:
@NodeEntity
public class Id {
@GraphId
Long nodeId;
@Indexed(unique = false)
String id;
@Fetch
@RelatedToVia(direction=Direction.BOTH)
Collection<ConnectionType> connections = new HashSet<ConnectionType>();
}
Y mi entidad de relación:
@RelationshipEntity(type = "CONNECTED_TO")
public class ConnectionType {
@GraphId Long id;
@StartNode Id fromUser;
@EndNode Id toUser;
String type;
}
¿Cuál podría ser el problema? ¿Hay alguna otra manera de modelar varias relaciones entre nodos?