2013-03-18 73 views
0

我正在使用Spring Data for 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_userlocationscount這樣的密鑰。

從調試聲明中我可以看到similar_userorg.neo4j.rest.graphdb.entity.RestNode的一個實例。有什麼辦法可以將它轉換成我的Spring Data節點實體:com.abc.graph.entity.User

回答

3

您可以通過手工進行:

template.createEntityFrom[Stored]State(userNode[,User.class)

或者你定義爲結果的Iterable或標註爲@MapResult的getter爲三列的接口Collection。它可以自動將吸氣劑名稱映射到結果列,也可以提供映射名稱。

@MapResult 
interface SimilarUser { 

    @ResultColumn("count") int getCount(); 
    @ResultColumn("similar_user") User getUser(); 
    @ResultColumn("locations") Collection<Location> getLocations(); 
} 
+0

謝謝! '@ MapResult'註釋起作用。然而,我調用'getLocations()'方法時得到這個異常:'org.springframework.data.neo4j.conversion.QueryResultBuilder $ 1不能轉換爲java.util.Collection'任何想法? – Stanley 2013-03-19 08:26:57

+0

嗯好點,你可以使用'@ResultColumn(「位置」)可迭代 getLocations();' – 2013-03-20 07:55:21

+0

當我試圖調用'Iterator'的next()方法時遇到了另一個異常:''java.lang .RuntimeException:無法從Iterable中提取多個元素的單個值。' – Stanley 2013-03-20 08:26:38

相關問題