2015-07-05 69 views
1

我得到org.neo4j.ogm.metadata.MappingException:無限遞歸(StackOverflowError)執行存儲庫查詢時。該項目是由SDN 3.SDN 4 - MappingException:無限遞歸(StackOverflowError)

樣域模型移植:

@NodeEntity 
public class Person { 
    ... 
    @Relationship(type = "FRIENDSHIP") 
    private Set<Friendship> friendships = new HashSet<Friendship>(); 
    ... 
} 

@RelationshipEntity 
public class Friendship { 
    ... 
    @StartNode private Person person1; 
    @EndNode private Person person2; 
    Date since; 
    ... 
} 

時,下面的查詢運行的異常被拋出:

@Query("MATCH (person1 {id: {0}.id})-[rel:FRIENDSHIP]->(person2 {id: {1}.id}) " 
     + "return rel") 
Friendship getFriendship(Person person1, Person person2); 

例外:

org.neo4j.ogm.metadata.MappingException: Infinite recursion (StackOverflowError) (through reference chain: com.example.domain.Friendship["person1StartNode"]->com.example.domain.Person["friendships"]->java.util.HashSet[0]->com.example.domain.Friendship["niperson1StartNode"]->com.example.domain.Person["friendships"]...... 

我認爲這可能與@StartNode和@EndNode是同一類型。但是當@EndNode是其他類型時,我得到了相同的異常。

使用快照。

回答

1

能否請您查詢更改爲

@Query("MATCH (person1 {id: {0}})-[rel:FRIENDSHIP]->(person2 {id: {1}}) " 
     + "return rel") 
Friendship getFriendship(long person1, long person2); 

(或id正確的數據類型)

參數本身是不支持的實體。

話雖如此,例外是根本沒有幫助。打開https://jira.spring.io/browse/DATAGRAPH-694

2

我有同樣的錯誤,但經過一些發現後,我注意到這是由於傑克遜將模型對象序列化爲JSON,進入無限遞歸。

解決方案是在成員上添加@JsonIgnore導致問題,或者只是從模型填充DTO並將其返回到API層。

我選擇了第一個選擇,因爲我正在研究一個原型並需要快速迭代,但第二個選項有一些魔術可能會避免這種JsonIgnore的東西。