使用Spring Data Mongo 1.5“发现循环”

问题描述 投票:12回答:3

我有一个完美运行Spring Data MongoDB 1.4.2的项目。我尝试更新到1.5.0并在自动装配(提取)期间出现此错误:

引起:org.springframework.data.mongodb.core.index.MongoPersistentEntityIndexResolver $ CyclicPropertyReferenceException:找到路径'filter.rules'类型'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”。它管理名为“Rule”的实体。该实体具有一些基本字段和“过滤器”字段。此Filter类包含Filter列表(可以为空)。

@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属性被解释为一个循环,它不是! (以及我对术语“循环”的理解)

它是发布中的错误还是这个用例有一个新的“标志”?

谢谢


对于背景故事,Filter类可以是叶子或用于构建复杂Criteria的树的节点,它是从mines http://mistic100.github.io/jQuery-QueryBuilder的jQuery插件的JSON构建的。

java spring spring-data spring-data-mongodb
3个回答
10
投票

你的代码是正确的。该日志消息只是INFO级别,告诉您代码中存在潜在的循环引用。

您可以通过关闭记录器来忽略该恼人的消息。如果您使用的是Spring Boot,请将其添加到application.properties文件: logging.level.org.springframework.data.mongodb.core.index=OFF


3
投票

给定类型包含一个strcuture,可能会在尝试解析索引信息和/或从存储中读取值时导致无限循环。在启动期间,将检查域类型以及集合的泛型类型信息。这指出了产生的错误中提到的循环。

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

虽然错误不应该阻止容器启动 - 只应打印到日志中。也许你会额外遇到DATAMONGO-949,并希望给当前的1.5.1-SNAPSHOT一个旋转。

请随意到open a ticket


2
投票

您正在使用:private List <Filter> rules = new ArrayList <Filter>();

将此更改为:private List <?> child;

我遇到了同样的问题,但在使用它之后,代码工作正常,没有错误。

© www.soinside.com 2019 - 2024. All rights reserved.