I came across this as a classic PEBKAC issue when importing the data, but 
the resulting exception on SDN was a bit obscure and I ended spending quite 
a bit of time time trying to work out what's wrong. It made me think of a 
better way of handling this issue at the data import step.

What happened was that I was importing data from a CSV file, and with the 
"helpful" Excel autocompletion I ended up with something like:
Node11,LinkedNodeX
Node11,LinkedNodeZ

instead of the intended:
Node11,LinkedNodeX
Node1,LinkedNodeZ

The result was that rather than having one relationship R between each 
pair, there were 2 relationships R going out of Node11 - which is never 
correct in my domain. Then when I was trying to retrieve a number of nodes 
via SDN I was getting an exception:
java.lang.IllegalArgumentException: Cannot obtain single field value for 
field 'to'
at 
org.springframework.data.neo4j.fieldaccess.RelatedToSingleFieldAccessorFactory$RelatedToSingleFieldAccessor.getValue(RelatedToSingleFieldAccessorFactory.java:94)
at 
org.springframework.data.neo4j.fieldaccess.DefaultEntityState.getValue(DefaultEntityState.java:97)
[...]

The problem was that despite having a data model in Neo4j and some unique 
constraints on node properties, I managed to mess up my data via cypher on 
the relationship level.

Note it's not a "I don't want 2 relationships of type X between A&B", but 
"If A has outgoing relationship X to B, then it cannot have outgoing 
relationship X going to C". As far as I understand, using MERGE in my 
queries would deal with the former case, but I can't quite figure out how 
to write an update, or place a constraint, that would fail in the latter 
case.
Obviously if I was inserting the data with SDN this would never have 
happened as I have a correct mapping on the POJO, but is there a way to 
enforce this on the Neo4j level, so that even if I messed up my cypher 
queries I can't affect data integrity?

Thanks

-- 
You received this message because you are subscribed to the Google Groups 
"Neo4j" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to