SDN 4 - MappingException:无限递归(StackOverflowError)
SDN 4 - MappingException: Infinite recursion (StackOverflowError)
我在执行存储库查询时收到 org.neo4j.ogm.metadata.MappingException:无限递归 (WhosebugError)。项目移植自SDN 3.
示例域模型:
@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 (WhosebugError) (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 是其他类型时,我得到了同样的异常。
使用快照。
能否将查询更改为
@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
我有同样的错误,但经过一些发现,我注意到这是由于 Jackson 将模型对象序列化为 JSON,进入无限递归。
解决方案是在导致问题的成员上添加一个 @JsonIgnore
,或者只是从模型中填充一个 DTO,然后 return 它在 API 层中。
我选择了第一个,因为我正在开发原型并且需要快速迭代,但是第二个选项有一些 BeanUtils
魔法可以避免这种 JsonIgnore 的东西。
我在执行存储库查询时收到 org.neo4j.ogm.metadata.MappingException:无限递归 (WhosebugError)。项目移植自SDN 3.
示例域模型:
@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 (WhosebugError) (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 是其他类型时,我得到了同样的异常。
使用快照。
能否将查询更改为
@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
我有同样的错误,但经过一些发现,我注意到这是由于 Jackson 将模型对象序列化为 JSON,进入无限递归。
解决方案是在导致问题的成员上添加一个 @JsonIgnore
,或者只是从模型中填充一个 DTO,然后 return 它在 API 层中。
我选择了第一个,因为我正在开发原型并且需要快速迭代,但是第二个选项有一些 BeanUtils
魔法可以避免这种 JsonIgnore 的东西。