“找到周期”与春季数据 Mongo 1.5

我有一个项目与Spring Data MongoDB 1.4.2完美运行。我试图更新到1.5.0,但在自动布线(提取)期间收到此错误:

Caused by: org.springframework.data.mongodb.core.index.MongoPersistentEntityIndexResolver$CyclicPropertyReferenceException:
在 org.springframework.data.mongodb.core.index.MongoPersistentEntityIndexResolver$CycleGuard.protect(MongoPersistentEntityIndexResolver.java:370) ~[spring-data-mongodb-1.5.0.RELEASE.jar:na]
at org.springframework.data.mongodb.core.index.MongoPersistentEntityIndexResolver$2.doWithPersistentProperty(MongoPersistentEntityIndexResolver.java:144) ~[spring-data-mongodb-1.5.0.RELEASE.jar:na]
at org.springframework.data.mongodb.core.index.MongoPersistentEntityIndexResolver$2.doWithPersistentProperty(MongoPersistentEntityIndexResolver.java:138) ~[spring-data-mongodb-1.5.0.RELEASE.jar:na]
at org.springframework.data.mapping.model.BasicPersistentEntity.doWithProperties(BasicPersistentEntity.java:294) ~[spring-data-commons-1.8.0.RELEASE.jar:na]

我有一个存储库“RulesDAO”,只是简单地扩展了“MongoRepository”。它管理一个名为“规则”的实体。此实体具有一些基本字段和“筛选器”字段。此 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;

}

(“rules”不是一个完美的名称,但对于MVC绑定,它必须以这种方式命名)

因此,Filter.rules 属性被解释为一个循环,其中它不是 !(好吧,根据我对术语“周期”的理解)

这是版本中的错误,还是此用例有新的“标志”?

谢谢


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


答案 1

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

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


答案 2

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

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

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

请随时开票


推荐