2014-02-18 1 views
0

У меня проблемы с частью моего проекта, который использует spring-data-neo4j. У меня есть узел класса сущностей:Spring Data Neo4j репозиторий, возвращающий пустую коллекцию

@NodeEntity 
@TypeAlias("Ad") 
public class Ad{ 
@GraphId 
private Long nodeId; 

@Indexed(indexName = "adId", unique = true) 
private Long id; 

@Fetch 
@RelatedTo(type="CONTAINS", direction = Direction.OUTGOING) 
private Collection<Keyword> keywords; 
... 

И хранилище для него такими методами:

@Query(value = "START ad1=node({adv}) MATCH ad1-[r1:CONTAINS]->Keyword<-[r2:CONTAINS]-similar RETURN similar SKIP {param_offset} LIMIT {param_limit}") 
Iterable<Ad> findSimilarAds(@Param("adv") Ad advertising, @Param("param_limit") int limit, @Param("param_offset") int offset); 

@Query(value = "START ad1=node:adId(id={p_id}) MATCH ad1-[r1:CONTAINS]->Keyword<-[r2:CONTAINS]-similar RETURN similar SKIP {param_offset} LIMIT {param_limit}") 
Iterable<Ad> findSimilarAdsById(@Param("p_id") Long id, @Param("param_limit") int limit, @Param("param_offset") int offset); 

, а затем проверить, что делать только что-то вроде этого:

  1. создания ключевых слов 1, создайте Ключевое слово 2 - ok

  2. создать узел объявлений с идентификатором 123456, содержащий ключевое слово 1 и ключ ога 2 - ок

  3. создать узел объявлений с ID 654321, содержащий ключевое слово 1 - ОК

  4. прибудете объявление с идентификатором 654321 - работает нормально, генерируется запрос:

    START ad = узел: adId (id = {0}) RETURN ad PARAMS {0 = 654321}

  5. получить аналогичные объявления с findSimilarAds() и аргументом является объявлением из предыдущего шага - хорошо работает, он возвращает объявление с идентификатором 123456, сгенерированный запросом:

    START ad1 = node ({adv}) MATCH ad1- [r1: CONTAINS] -> Ключевое слово < - [r2: CONTAINS] - аналогично RETURN аналогично SKIP {param_offset} LIMIT {param_limit} params {param_offset = 0, param_limit = 10, adv = 48}

  6. после этого получить похожие объявления с помощью метода findSimilarAdsById() - аргумент id равен 654321L. Результат запроса выглядит следующим образом:

    START AD1 = узел: Адид (ID = {P_ID}) MATCH ad1- [r1: СОДЕРЖИТ] -> Ключевое слово < - [г2: СОДЕРЖИТ] -similar RETURN аналогичный SKIP {} param_offset ЛИМИТ {param_limit} {PARAMS param_offset = 0, P_ID = 654321, param_limit = 10}

Но он возвращается пустой экземпляр org.springframework.data.neo4j.conversion.QueryResultBuilder (я пытаюсь пытается получить элементы с итератором) вместо коллекции Iterable с объявлением 123456. Я пробовал почти все, что мог придумать, с любым успехом, я пропустил что-то важное?

Версия:

  • пружинных данные Neo4j 2.3.3.RELEASE
  • Neo4j-монограмма-1,8
  • DSL
  • весна материал 3.1.4.RELEASE
  • весна-данные neo4j- аспекты 2.3.2.RELEASE

ответ

0

Я думаю, что вы запускаете в числовом индексировании вопрос, который нельзя использовать с cypher. Из-за проблем с парсером lucene.

Если вы используете

@Indexed(indexName = "adId", unique = true, numeric=false) 
private Long id; 

он должен работать.

Или вы должны передать в ValueContext.numeric(id) вместо Long id в качестве параметра метода.

Для производных искателей мы обрабатываем, что автоматически, но для определенного пользователя запросов мы не можем знать, что вы на самом деле проходите в.

+0

Решения с «числовыми = ложью» работал. Спасибо. – xc0

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