2017-05-21 19 views
0

私は次のクラスがあります:私はこれらのリンクで作業しようとすると、何らかの理由で私は無限ループを取得しています、今無限再帰の問題

public class Person 
{ 
    @Id 
    ObjectId Id; 

    String name; 

    @DBRef(lazy = true) 
    List<Entity> entities; 

    /* Getters and setters omitted for brevity. */ 
} 



public class Entity 
{ 
    @Id 
    ObjectId Id; 

    String entityName; 

    @DBRef(lazy = true) 
    List<Person> people; 

    /* Getters and setters omitted for brevity. */ 
} 

を... I怠け者=真実だと思ったのですが、誰かが私が間違っていることを知っていますか?

答えて

0

Spring Data Mongoには、スタックオーバーフローを避けるためにデフォルトでDbRefsを遅延させるオプションが記載されています。

StackOverflow例外は、遅延しているかどうかにかかわらず、コンストラクタに配置されている場合にのみ発生します。これは、同じ無限再帰をトリガする2つの他の問題を参照します。

"唯一"が誤字であるかどうかはわかりません。そして

誰かがそうDBRef

の解像度

可能性のある理由をトリガーする可能性があり、その@Documentエンティティに(「等しい」、「ハッシュコード」または「のtoString」)オブジェクトのメソッドをオーバーライドする場合あなたの問題は、他の何かが再帰的解決を引き起こしているということです。

スタックトレースの上部を調べることで、犯人を見つけることができます。あなたのコメントに基づいて

UPDATE

、これは春データに関連すると思われるが、ジャクソンに問題はありません。

実際にこの問題を解決する方法があります。これは私に約束しているようです。https://stackoverflow.com/a/4126846/66686

+0

ちょっと!すべてのスタックトレース情報は、ジャクソンの言葉にすぎません。私が実際にやっていることは、エンティティの挿入とPersonの挿入です。 Insertは私が作成したインスタンス(Idsなど)を補完して返します。その場合、Personインスタンスのエンティティリストにエンティティを追加し、EntityのPeopleリストにPersonを追加し、両方で保存します。 どの時点で、それはナットになるようです...私は間違っているのですか? – IWishIWasABarista

+0

それはSpring Data Mongoのように聞こえてきました。しかし、ジャクソンには問題があります。可能な解決策へのリンクで答えを更新しました。 –