9

http://static.springsource.org/spring-data/data-mongo/docs/1.1.0.RELEASE/reference/html/#mapping-chapterを読みましたが、次の基本的な春のデータに対する答えが見つかりません- mongodb オブジェクト マッピングの質問:

MongoDB から次のクラスのインスタンスをロードすると:

public class Test {
    private String str1;
    private String str2;
    private Date date3;

    public Test(String str1) {
        this.str1 = str1;
        this.date3=new Date();
    }
}

MongoDB ドキュメントのTest(String str1)最上位フィールドにある値でコンストラクターが呼び出されることを理解しています。このコンストラクターは、 a を明示的str1に宣言することと同等であると想定しています。@PersistenceConstructor

str2, date3しかし、この場合、フィールドはどうなるでしょうか? コンストラクターの一部ではないすべてのフィールドはまだ初期化されますか?str2, date3それとも、のみを使用する PeristenceConstructorstr1が見つかったため、値が失われますか?

そして最後に、これはどのような順序で起こりますか?コンストラクターによって設定され、その後、以前に永続化されたフィールドによって上書きされますdate3か、またはその逆ですか?

4

1 に答える 1

13

ポピュレーション プロセスは 2 つに分かれており、ある程度直交しています。ほとんどの場合、正しい動作についてはすでに述べています。コンストラクターが呼び出されて、オブジェクト インスタンスが作成されます。パラメーター値はDBObject読み取りから取得され、ネストされた から非整列化する必要がある複雑なオブジェクトをコンストラクターに渡す場合、オブジェクトの再帰的な作成が発生する可能性がありますDBObject

次のステップは、永続フィールドにデータが入力されることです。あなたの場合とデフォルトのコンストラクターの場合の唯一の違いは、コンストラクターに渡したフィールド値を記憶し、それらを再入力しないことです。

オブジェクトが実体化されたソースドキュメントに の値が含まれている場合、例のdateプロパティはコンストラクターでの初期化後に設定されます。date

于 2013-01-31T12:00:46.430 に答える