2015-06-26 3 views
2

С SDN 3 можно было использовать Neo4jOperations.convert (значение объекта, тип класса) для преобразования результатов из шифровальщика запроса, который возвращает Iterable < < Карты String, Object > > к класс домена Neo4j (аннотируется с @NodeEntity). Например:SDN 4 - Neo4jOperation.convert() не рекомендуется

Map<String,Object> results = repository.findSomething("John"); 
for(Map<String,Object> row : results) { 
    Person person = neo4jOperations.convert(row.get("person"), Person.class); 
    ... 
} 

// Repository method 
@Query("MATCH (person:Person)-[rel]->(node) WHERE person.firstName = {firstName} RETURN DISTINCT person, COUNT(rel) ORDER BY COUNT(rel)" 
Iterable<Map<String,Object>> findSomething(@Param("firstName") String firstName); 

В Т CONVERT (значение объекта, тип класса) больше не существует в Neo4jOperations в SDN 4, в чем эквивалентность для этого в SDN 4?

http://docs.spring.io/spring-data/neo4j/docs/4.0.0.M1/reference/html/#reference_programming_model_simple-mapping не охватывает, как отображение/преобразование выполняется явно или неявно.

Я использую сборку моментальных снимков.

Любая помощь очень ценится.

ответ

2

Как предлагает Луанна, вам нужно сделать это за два шага в данный момент. Для метода репозитория вы можете попробовать что-то вроде этого, вместо:

@Query("MATCH (p:Person)-[rel]->(node) WHERE p.firstName = {firstName} RETURN DISTINCT p ORDER BY COUNT(rel)") 
Iterable<Person> findSomething(@Param("firstName") String firstName); 

Это должно вернуть Person объекты, которые вы хотите в правильном порядке, хотя я ценю фактическое количество не будет отображаться, так что вы должны были бы выдавать второй запрос, чтобы найти счет, к сожалению.

Если вам не нужны фактические объекты Person, а скорее некоторые свойства этих узлов, тогда обход может состоять в том, чтобы сопоставить объект @QueryResult. Что-то вроде этого:

@Query("MATCH (p:Person)-[rel]->(node) WHERE p.firstName = {firstName} RETURN DISTINCT p.firstName, p.surname, p.dateOfBirth, COUNT(rel) AS rank ORDER BY rank") 
Iterable<PersonQueryResult> findSomething(@Param("firstName") String firstName); 

... где PersonQueryResult является POJO с аннотацией @QueryResult с сеттеры/добытчиками, соответствующими свойствами, перечисленными в пункте обратного запроса.

+0

Спасибо. Я не знал, что @QueryResult уже реализован, поскольку он не был в выпуске M1. – user1838830

1

Для этого варианта использования вам необходимо будет вернуть ID (личность) и вместо этого использовать repository.findOne или neo4jOperations.load.

+0

Спасибо Luanne. Это временное решение или это способ сделать это с SDN4 в будущем? – user1838830

+0

Это не планируется в первом выпуске GA как минимум – Luanne