Я использую данные Spring для Neo4j для доступа к графику Neo4j. У меня есть UserRepository
с аннотированным запросом, как показано ниже:Как преобразовать org.neo4j.rest.graphdb.entity.RestNode в Spring Data Neo4j Узел узла
package com.abc.graph.repository;
import java.util.List;
import java.util.Map;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.neo4j.annotation.Query;
import org.springframework.data.neo4j.repository.GraphRepository;
import org.springframework.data.neo4j.repository.NamedIndexRepository;
import org.springframework.data.neo4j.repository.RelationshipOperationsRepository;
import com.abc.graph.entity.User;
public interface UserRepository extends GraphRepository<User>, NamedIndexRepository<User>,
RelationshipOperationsRepository<User> {
public User findById(String id);
public Page<User> findByNameLike(String name, Pageable page);
@Query("START user=node:User(id={0}) " +
"MATCH user-[:VISITS]->(location)<-[:VISITS]-(similar_user) " +
"RETURN similar_user, collect(location) as locations, count(*) as count " +
"ORDER BY count desc ")
public List<Map<String, Object>> findSimilarUsersByPlaceVisited(String userId);
}
То, что я пытаюсь извлечь из графика представляет собой список пользователей, которые были в подобные места и для каждого пользователя, каковы общие места они был. Метод вернет список Map<String, Object>
. Каждая карта будет содержать такой ключ, как similar_user
, locations
и count
.
Из отчета об отладке я вижу, что similar_user
является экземпляром org.neo4j.rest.graphdb.entity.RestNode
. Есть ли способ преобразовать его в объект узла Spring Data, который равен com.abc.graph.entity.User
?
Спасибо! Работает аннотация '@ MapResult'. Однако я получаю это исключение при вызове метода getLocations() ': org.springframework.data.neo4j.conversion.QueryResultBuilder $ 1 не может быть добавлено в java.util.Collection' Любая идея? – Stanley
Хм, хорошая точка, вы можете использовать '@ResultColumn (« location ») Iterable getLocations();' –
Я получаю еще одно исключение при попытке вызвать метод 'next()' 'Iterator':' java.lang .RuntimeException: Не удается извлечь одно значение из Iterable с несколькими элементами. ' – Stanley