2015-11-29 2 views
0

Пробуя SDN 4 и обнаружив, что хотя некоторые запросы работают в браузере cypher, они, похоже, не работают в моем репозитории. Например, когда я ввожу запрос:Spring Neo4j 4 (SDN) Метод подстановочных меток не работает

MATCH (p:Publication) WHERE p.name =~'(?i)e.*' RETURN p; 

В браузере cypher он возвращает ожидаемые результаты. Однако с моим репозиторием определяется как:

public interface PublicationRepo extends GraphRepository<Publication> { 
    Publication findByName(String name); 
    @Query(value="MATCH (p:Publication) WHERE p.name=~'(?i){0}.*' RETURN p") 
    Iterable<Publication> findByNameLikeIgnoreCase(String name); 
} 

он возвращает нулевые результаты.

Настройка проекта функционирует нормально, как я могу получить данные из других методов пользовательских запросов, но матч группового символа не работает

Кроме того, я нахожу это странным, что стандартные методы запросов JPA Spring Data также не (например, «findByNameContaining» и т. д.). Кто-нибудь еще сталкивается с этим, или я делаю что-то неправильно. Все примеры, которые я видел, очень просты.

+0

Поддержка искатели с использованием Like будут доступны в одном из следующих выпусков – Luanne

ответ

1

Это не проблема с источником данных neo4j. Вы используете параметр в строке, где он не оценивается.

Измените его на это, которое объединяет строку для регулярного выражения, используя параметр.

MATCH (p:Publication) WHERE p.name=~ ('(?i)' + {0} + '.*') RETURN p 

public interface PublicationRepo extends GraphRepository<Publication> { 
    Publication findByName(String name); 
    @Query("MATCH (p:Publication) WHERE p.name=~ ('(?i)'+{0}+'.*') RETURN p") 
    Iterable<Publication> findByNameLikeIgnoreCase(String name); 
} 
+0

Это сделал трюк ... Большое спасибо, @ майкл-голод –

0

Не уверен, что есть лучший способ решить эту проблему, но по сути я объединил маркеры подстановочных знаков с помощью строки поиска, прежде чем передавать ее методу finder. Код, как, например:

public interface PublicationRepo extends GraphRepository<Publication> { 
    Publication findByName(String name); 
    @Query(value="MATCH (p:Publication)-[r:HAS_PUBLICATION]-(i:Issue) WHERE p.name=~{0} RETURN p, r, i") 
    Iterable<Publication> findByNameLikeIgnoreCase(String name); 
} 

Сейчас это работает, но я не реально люблю вызывающий нуждающееся массировать параметр запроса. Такова жизнь.

Смежные вопросы