SpringData和Elasticsearch - 使用ignoreFields时的java.lang.StackOverflowError

时间:2016-10-12 08:49:56

标签: elasticsearch spring-boot spring-data spring-data-elasticsearch

我使用的是简单的关系(spring data elasticsearch),但springboot正在抛出StackOverflowError

@Document(indexName = "users", type = "user")
public class User {
    @Id
    private String id;

    @Field(type= FieldType.Nested,ignoreFields={"users"})
    private Set<Group> groups = new HashSet<Group>();
}

@Document(indexName = "groups", type = "group")
public class Group {

    @Id
    String id;

    @Field(type = FieldType.Nested, ignoreFields ={"groups"})
    private Set<User> users = new HashSet<User>();
}

public interface UserRepository extends ElasticsearchRepository<User, String>{

}

public interface GroupRepository extends ElasticsearchRepository<Group, String> {

}

任何想法是什么问题?

代码来自https://github.com/spring-projects/spring-data-elasticsearch/tree/master/src/test/java/org/springframework/data/elasticsearch/entities

由于 拉詹

1 个答案:

答案 0 :(得分:0)

正如你所说:spring-boot正在抛出StackOverflowError。

这是因为没有安全措施或在spring-boot中检测循环依赖。

看一下spring-boot源代码:MappingBuilder.java,当你的A类具有引用类B的@Field注释时,它会永远不会中断,@Field注释引用类A。