2013-09-27 2 views
0

Je reçois RuntimeException lors de l'appel Neo4jTemplate.getOrCreateRelationship() méthode et passer dans les propriétés qui contient un ArrayList.Spring Data La méthode Neo4jTemplate.getOrCreateRelationship() ne prend pas en charge la propriété de type tableau.

java.lang.RuntimeException: Error retrieving or creating relationship for key testKey and value 999 with index TestRelIndex 

Voici mon code:

Map<String, Object> relProperties = new HashMap<String, Object>(); 
List<String> tags = new ArrayList<String>(); 
tags.add("tag1"); 
tags.add("tag2"); 
relProperties.put("tags", tags); 
Relationship rel = template.getOrCreateRelationship("TestRelIndex", "testKey", 999, userNode, itemNode, "shortlist", relProperties); 

Le message d'exception n'est pas descriptive. Après un débogage, j'ai réussi à obtenir le message d'erreur suivant de la méthode org.neo4j.rest.graphdb.ExecutingResAPI.getOrCreateRelationship() où l'exception RuntimeException est levée.

{"message":"Unknown property type on: [tag1, tag2], class java.util.ArrayList","exception":"IllegalArgumentException","fullname":"java.lang.IllegalArgumentException","stacktrace":["org.neo4j.kernel.impl.nioneo.store.PropertyStore.encodeValue(PropertyStore.java:582)","org.neo4j.kernel.impl.nioneo.xa.WriteTransaction.relAddProperty(WriteTransaction.java:1210)","org.neo4j.kernel.impl.persistence.PersistenceManager.relAddProperty(PersistenceManager.java:176)","org.neo4j.kernel.impl.core.NodeManager.relAddProperty(NodeManager.java:1156)","org.neo4j.kernel.impl.core.RelationshipImpl.addProperty(RelationshipImpl.java:69)","org.neo4j.kernel.impl.core.Primitive.setProperty(Primitive.java:436)","org.neo4j.kernel.impl.core.RelationshipImpl.setProperty(RelationshipImpl.java:29)","org.neo4j.kernel.impl.core.RelationshipProxy.setProperty(RelationshipProxy.java:129)","org.neo4j.server.rest.web.DatabaseActions$UniqueRelationshipFactory.initialize(DatabaseActions.java:1058)","org.neo4j.server.rest.web.DatabaseActions$UniqueRelationshipFactory.initialize(DatabaseActions.java:1033)","org.neo4j.graphdb.index.UniqueFactory.getOrCreateWithOutcome(UniqueFactory.java:241)","org.neo4j.server.rest.web.DatabaseActions.getOrCreateIndexedRelationship(DatabaseActions.java:1018)","org.neo4j.server.rest.web.RestfulGraphDatabase.addToRelationshipIndex(RestfulGraphDatabase.java:871)","java.lang.reflect.Method.invoke(Method.java:601)","org.neo4j.server.rest.security.SecurityFilter.doFilter(SecurityFilter.java:112)"]} 

J'ai essayé de créer la même relation avec Neo4jTemplate.createRelationshipBetween() et il fonctionne très bien. Cela signifie-t-il que Neo4jTemplate.getOrCreateRelationship() ne prend pas encore en charge la propriété de type tableau?

Répondre

1

Exactement. Vous pouvez stocker des primitives, mais pas des objets comme un Array. Essayez un sérialiseur personnalisé ou divisez vos propriétés en un tableau de chaînes plutôt qu'un AraryList.

https://groups.google.com/forum/#!topic/neo4j/8SZDaGTELnk donne aussi quelques conseils.

Questions connexes