У меня много разных узлов, связанных с отношениями. В этих отношениях я использую некоторые свойства типа Enum, и я пытаюсь выполнить запрос через отношения с использованием языка Cyper и возвращать только те, у кого свойство Enum находится в массиве. Кроме того, отношения, с которыми я пытаюсь выполнить запрос, являются подклассом другого, у которого есть свойство, с которым я хочу выполнить запрос. Вот пример:Данные весны neo4j и запрос с ключевым словом IN
@RelationshipEntity
public class Mother {
@Indexed(level=Level.INSTANCE) Visibility visibility;
public Visibility getVisibility() {
return visibility;
}
public void setVisibility(Visibility visibility) {
this.visibility = visibility;
}
}
public class Child extends Mother {
@StartNode StartNode start;
@EndNode EndNode end;
}
Представьте, что видимость является перечислением, которое может быть как частная, сетью или Public. Затем в хранилище я попытался следующие запросы, но он всегда возвращает все или выдает ошибку:
@Query("start s=node({0}) match s-[r:TYPE]->e where r.visibility='Private' return r")
Iterable<Child> findChildren(StartNode start);
@Query("start s=node({0}) match s-[r:TYPE]->e where r.visibility=\"Private\" return r")
Iterable<Child> findChildren(StartNode start);
@Query("start s=node({0}) match s-[r:TYPE]->e where r.visibility=Private return r")
Iterable<Child> findChildren(StartNode start);
То, что я действительно хотел бы использовать это «IN» оператор, но выдает ошибку, как если бы Бесполезный Не знаю, что такое IN.
@Query("start s=node({0}) match s-[r:TYPE]->e where r.visibility in ['Private', 'Network'] return r")
Iterable<Child> findChildren(StartNode start);
Является ли моя видимость не проиндексированной? или я не должен это делать? Я не пытался изменить свойство Видимость с помощью строки, которая, я полагаю, должна работать, так как у меня есть другие свойства String, с которыми я могу успешно запросить. Использование оператора «IN» - это бонус!
Редактировать 1: Я использую spring-data-neo4j 2.0.1.RELEASE. Я пытаюсь сделать это в модульном тестировании, используя org.neo4j.test.ImpermanentGraphDatabase
, но я просто понял, что запрос @Query("start s=node({0}) match s-[r:TYPE]->e where r.visibility='Private' return r")
работает при запуске сервера, используя конфигурацию по умолчанию, но он по-прежнему не работает в модульном тестировании. Кроме того, даже при запуске сервера предложение «IN» по-прежнему вызывает ошибку. Это связано с версией, которую я использую? Я помню, как пытался использовать более новую версию, но потом зависания не удались, возможно, я должен попробовать еще раз.
Редактировать 2: Поэтому я обновил версию spring-data-neo4j до версии 2.1.0.BUILD-SNAPSHOT, обновил версию neo4j до 1.7. Теперь у меня нет ошибки для ключевого слова «IN», но я не знаю, какой синтаксис следует использовать для передачи значений, которые нужно выполнить для поиска. Таким образом, наличие
@Query("start s=node({0}) match s-[r:TYPE]->e where r.visibility in [{1}] return r")
Iterable<Child> findChildren(StartNode start, String visibility);
работает, если я прохожу по простой строки, как Public
, но если я прохожу по Public, Private
, который никогда не возвращает ничего, даже если Public
делает ответные матчи. Я также попытался изменить параметр String visibility
на String[] visibility
, но это не работает вообще.
Пожалуйста, используйте 'r.visibility в {1}' без квадратных скобок. –