3

私がポジョを持っているとしましょう

public class example{
    private String id;
    private String photoId
}

この pojo のインスタンスを保存すると、id が objectId として保存されます。また、photoId が ObjectId としてシリアル化されることも望んでいます。それを有効にするphotoIdに追加できる注釈のようなものはありますか?

public class example{
    @Id
    private String id; //default objectId serialization

    @MongoType(ObjectId.class) //not real annotation, looking for real one
    private String photoId; // enforce ObjectId serialization - what i want

mongoTemplate.insert(examplePojo); //will result as {_id :objectId(), photoId: objectId(...)}

----- 編集 ------ photoId は objectId の文字列表現です。例:

public void saveExample(String id, String photoId){
    Example example = new Example(id, photoId);
    mongoTemplate.insert(example);
}

ご協力いただきありがとうございます!

ロイ

4

3 に答える 3

0

あなたは本当にそれをしたいですか?

オブジェクト ID は、いくつかの追加情報とともに mongodb によって生成されます。

ObjectId は 12 バイトの BSON タイプで、以下を使用して構築されます。

  1. Unix エポックからの秒数を表す 4 バイトの値。
  2. 3 バイトのマシン ID、
  3. 2 バイトのプロセス ID、および
  4. ランダムな値で始まる 3 バイトのカウンター。

あなたの側でそれを生成する必要はありません。ただし、その機能をオーバーライドすることは可能です。

spring-mongodb のドキュメントから:

次に示すのは、MongoTemplate のデフォルトである MappingMongoConverter を使用するときに、_id ドキュメント フィールドにマッピングされたプロパティで行われる型変換の概要です。

  • Java クラスで文字列として宣言された id プロパティまたはフィールドは、可能であれば Spring
    コンバーターを使用して ObjectId に変換され、保存されます。有効な変換規則は
    、MongoDB Java ドライバーに委譲されます。ObjectId に変換できない場合
    、値は文字列としてデータベースに格納されます。
  • Java クラスでBigIntegerとして宣言された id プロパティまたはフィールドは、Spring
    Converterを使用して ObjectId に変換され、格納されます。

ただし、独自の型に対して独自の Converter を作成できます。

また変更

@MongoType(ObjectId.class)@Id。カスタム ID に何らかの値があることを確認してください。そうでない場合は、mongodb が ObjectID を作成します。

ObjectIds に関するmongodbマニュアルも確認してください。

アップデート

問題は、参照をどのように処理するかです。

ここにマニュアルからの小さな例があります。

@Document
public class Account {
 @Id
 private ObjectId id;
 private Float total;
}
@Document
public class Person {
 @Id
 private ObjectId id;
 @Indexed
 private Integer ssn;
 @DBRef
 private List<Account> accounts;
}

それが今明らかになることを願っています。

そして、spring-mongodb ドキュメントセクション 4.6

于 2014-07-13T08:52:08.263 に答える