web-dev-qa-db-ja.com

Spring Data Mongo1.5で「サイクルが見つかりました」

Spring Data MongoDB1.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]
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]
org.springframework.data.mapping.model.BasicPersistentEntity.doWithProperties(BasicPersistentEntity.Java:294)〜[spring-data-commons-1.8.0.RELEASE.jar:na]

「MongoRepository」を拡張しただけのリポジトリ「RulesDAO」があります。 「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の構築に使用されるツリーのリーフまたはノードのいずれかであり、鉱山のjQueryプラグインのJSONから構築されます http://mistic100.github.io/jQuery-QueryBuilder

14
Mistic

あなたのコードは正しいです。そのログメッセージは、コードに潜在的なサイクル参照があることを示すINFOレベルです。

ロガーをオフにすることで、その迷惑なメッセージを無視できます。 Spring Bootを使用している場合は、これをapplication.propertiesファイルに追加します。logging.level.org.springframework.data.mongodb.core.index=OFF

13
Hank

指定されたタイプには、インデックス情報の解決やストアからの値の読み取り中に無限ループを引き起こす可能性のある構造が含まれています。起動時に、ドメインタイプとコレクションのジェネリックタイプ情報が検査されます。これは、結果のエラーに記載されているサイクルを示しています。

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

エラーによってコンテナの起動が妨げられることはありませんが、ログにのみ出力する必要があります。たぶん、あなたはさらに DATAMONGO-949 に遭遇し、現在の1.5.1-SNAPSHOTにスピンを与えたいと思うでしょう。

お気軽に チケットを開く

4

使用しています:プライベートリスト<フィルター>ルール=新しいArrayList <フィルター>();

これを次のように変更します:プライベートリスト<?>子;

私は同じ問題に直面していましたが、これを使用した後、コードはエラーなしで正常に動作しています。

3
sorav sahu