"Цикл найден" с данными Spring Mongo 1.5

У меня есть проект, прекрасно работающий с Spring Data MongoDB 1.4.2. Я попытался обновить до 1.5.0, и я получаю эту ошибку во время autowiring (extract):

Вызывается: org.springframework.data.mongodb.core.index.MongoPersistentEntityIndexResolver $ CyclicPropertyReferenceException: Найден цикл для полевых правил в типе "Фильтр" для path 'filter.rules'
на org.springframework.data.mongodb.core.index.MongoPersistentEntityIndexResolver $ CycleGuard.protect(MongoPersistentEntityIndexResolver.java:370) ~ [spring-data-mongodb-1.5.0.RELEASE.jar: na]
на org.springframework.data.mongodb.core.index.MongoPersistentEntityIndexResolver $ 2.doWithPersistentProperty(MongoPersistentEntityIndexResolver.java:144) ~ [spring-data-mongodb-1.5.0.RELEASE.jar: na]
на org.springframework.data.mongodb.core.index.MongoPersistentEntityIndexResolver $ 2.doWithPersistentProperty(MongoPersistentEntityIndexResolver.java:138) ~ [spring-data-mongodb-1.5.0.RELEASE.jar: na]
на org.springframework.data.mapping.model.BasicPersistentEntity.doWithProperties(BasicPersistentEntity.java:294) ~ [spring-data-commons-1.8.0.RELEASE.jar: na]

У меня есть репозиторий "RulesDAO", просто расширяющий "MongoRepository". Он управляет организацией с именем "Правило". Этот объект имеет некоторые базовые поля и поле "Фильтр". И этот класс фильтра содержит список фильтров (который может быть пустым).

@Document(collection="rules")
public class Rule {

    @Id private String id;

    private String name;

    // other fields

    private Filter filter;

}

public class Filter {

    // for groups
    private String condition;

    private List<Filter> rules = new ArrayList<Filter>();


    // for query
    private String field;

    private String value;

}

("правила" не являются идеальным именем, но его нужно назвать таким образом для привязки MVC)

Таким образом, свойство Filter.rules интерпретируется как цикл, где это не так! (хорошо в моем понимании термина "цикл")

Это ошибка в выпуске или есть новый "флаг" для этой утилиты?

благодаря


Для предыстории класс фильтра может быть либо листом, либо узлом дерева, используемым для построения сложных критериев, он построен из JSON плагина jQuery на шахтах http://mistic100.github.io/jQuery-QueryBuilder

Ответы

Ответ 1

Ваш код правильный. Это сообщение журнала - просто уровень INFO чтобы сообщить вам, что в вашем коде есть потенциальная ссылка на цикл.

Вы можете игнорировать это раздражающее сообщение, выключив регистратор. Если вы используете Spring Boot, добавьте это в файл application.properties: logging.level.org.springframework.data.mongodb.core.index=OFF

Ответ 2

Указанные типы содержат strcuture, потенциально вызывающие бесконечные циклы, при попытке разрешить информацию индекса и/или считывать значения из хранилища. При загрузке проверяются типы доменов, а также информация об общих типах Коллекций. Это указывает на цикл, упомянутый в полученной ошибке.

Rule -> Filter -> Filter.rules
          ^                |
          |                |
          +----------------+

Хотя ошибка не должна препятствовать запуску контейнера - должна быть напечатана только в журнале. Возможно, вы случайно включились в DATAMONGO-949 и хотите дать текущую 1.5.1-SNAPSHOT вращение.

Пожалуйста, не стесняйтесь открывать билет.

Ответ 3

Вы используете: private List <Filter> rules = new ArrayList <Filter>();

измените это на: private List <?> child;

Я столкнулся с одной и той же проблемой, но после этого код работает нормально без ошибок.