SpringData и Elasticsearch — java.lang.StackOverflowError при использовании ignoreFields

Я использую простые отношения (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

Спасибо, Раджан.


person Rajan Punchouty    schedule 12.10.2016    source источник
comment
Вы нашли решение этой проблемы?   -  person Simon Dyson    schedule 04.03.2021


Ответы (1)


Как вы сказали: spring-boot выдает StackOverflowError.

Это из-за отсутствия гарантий или обнаружения циклических зависимостей в spring-boot.

Посмотрите на источник весенней загрузки: MappingBuilder.java, существует цикл, который никогда не разорвется, если у вас есть класс A, у которого есть @Field аннотация, ссылающаяся на класс B, который имеет @Field аннотацию, ссылающуюся на класс A.

person Augustin Ghauratto    schedule 04.04.2017