У меня странная проблема с шифрованным запросом. Запрос отлично работает в Neoclipse и возвращает правильный результат. Но во встроенном режиме java результат пуст. Я не могу понять проблему. Есть ли ограничение на количество символов запроса во встроенной Java или что-то подобное?
Вот шифрованный запрос:
START
typeNode6=node(6) ,
containerNode=node(9) ,
typeNode35=node(35) ,
typeNode15=node(15) ,
typeNode18=node(18) ,
typeNode33=node(33)
MATCH (node6)-[:TYPE]->(typeNode6) ,
(containerNode)-[:CONTAINS*]->(node6) ,
(node35)-[:TYPE]->(typeNode35) ,
(node6)-[:`http://www.test.test/types/s3/media#actors`]->(node35) ,
(node15)-[:TYPE]->(typeNode15) ,
(node35)-[:`http://www.test.test/types/s3/media#impersonatedBy`]->(node15) ,
(node18)-[:TYPE]->(typeNode18) ,
(node15)-[:`http://www.test.test/types/common#namedBy`]->(node18) ,
(node33)-[:TYPE]->(typeNode33) ,
(node6)-[:`http://www.test.test/types/s3/media#runtime`]->(node33)
WHERE
node6.`http://www.test.test/types/s3/media#releaseYear`! = 1988
AND node18.`http://www.test.test/types/common#firstName`! = 'Robert'
AND node18.`http://www.test.test/types/common#lastName`! = 'Davi'
AND node33.`http://www.test.test/types/common#intValue`! = 131 RETURN node6";
Вот мой тестовый класс Java:
@Test
public void queryExecute() {
ExecutionResult result, result2;
ExecutionEngine engine;
String query = "START typeNode6=node(6) ,containerNode=node(9) ,typeNode35=node(35) ,typeNode15=node(15) ,typeNode18=node(18) MATCH (node6)-[:TYPE]->(typeNode6) ,(containerNode)-[:CONTAINS*]->(node6) ,(node35)-[:TYPE]->(typeNode35) , (node6)-[:`http://www.test.test/types/s3/media#actors`]->(node35) ,(node15)-[:TYPE]->(typeNode15) , (node35)-[:`http://www.test.test/types/s3/media#impersonatedBy`]->(node15) ,(node18)-[:TYPE]->(typeNode18) , (node15)-[:`http://www.test.test/types/common#namedBy`]->(node18) WHERE node18.`http://www.test.test/types/common#firstName`! = 'Robert' AND node18.`http://www.test.test/types/common#lastName`! = 'Davi' RETURN node6";
String query2 = "START typeNode6=node(6) ,containerNode=node(9) ,typeNode35=node(35) ,typeNode15=node(15) ,typeNode18=node(18) ,typeNode33=node(33) MATCH (node6)-[:TYPE]->(typeNode6) ,(containerNode)-[:CONTAINS*]->(node6) ,(node35)-[:TYPE]->(typeNode35) , (node6)-[:`http://www.test.test/types/s3/media#actors`]->(node35) ,(node15)-[:TYPE]->(typeNode15) , (node35)-[:`http://www.test.test/types/s3/media#impersonatedBy`]->(node15) ,(node18)-[:TYPE]->(typeNode18) , (node15)-[:`http://www.test.test/types/common#namedBy`]->(node18) ,(node33)-[:TYPE]->(typeNode33) , (node6)-[:`http://www.test.test/types/s3/media#runtime`]->(node33) WHERE node6.`http://www.test.test/types/s3/media#releaseYear`! = 1988 AND node18.`http://www.test.test/types/common#firstName`! = 'Robert' AND node18.`http://www.test.test/types/common#lastName`! = 'Davi' AND node33.`http://www.test.test/types/common#intValue`! = 131 RETURN node6";
engine = new ExecutionEngine(svrInstance.getNeoGraphdb());
result = engine.execute(query);
result2 = engine.execute(query2);
Assert.assertNotNull(result);
System.out.println("============== CYPHER QUERY TEST ==============");
System.out.println("uncomplicated: ");
System.out.println(result.toString());
System.out.println("complicated: ");
System.out.println(result2.toString());
System.out.println("============== CYPHER QUERY TEST ==============");
}
И это вывод из java-консоли:
============== CYPHER QUERY TEST ==============
uncomplicated:
+---------------------------------------------------------------------------------------------------------------------------------------------------+
| node6 |
+---------------------------------------------------------------------------------------------------------------------------------------------------+
| Node[7]{http://www.test.test/types/common#id:"movie_1",http://www.test.test/types/s3/media#releaseYear:1988,type:"instance",instanceId:"movie_1"} |
+---------------------------------------------------------------------------------------------------------------------------------------------------+
1 row
138 ms
complicated:
+-------+
| node6 |
+-------+
+-------+
0 row
4 ms
============== CYPHER QUERY TEST ==============
Оба запроса (в java) должны возвращать один и тот же результат (по крайней мере, в Neoclipse). Разница в том, что «сложный запрос» получил больше условий «ГДЕ».
Кстати, запросы генерируются динамически из java, но это не должно быть проблемой, потому что они работают в Neoclipse. (И я всегда использовал одно и то же местоположение базы данных.)
Спасибо за помощь! Привет Макс