2017-12-28 14 views
0

MongoDBのマニュアルでは、手動で参照するためにObjecIdを使用することをお勧めします。JavaでObjectIdを文字列として使用する(マニュアルリファレンス)spring-data mongodbで

@Document 
public class People { 

    private String name; 
    @Reference // or any Annotation to convert an ObjectId to a String 
    private String placesId; 
    private String url; 
} 

方法: 私は春・データのMongoDBを使用して、どのような私が探していることは、次のように定義された人々クラスを持つことですよhttps://docs.mongodb.com/manual/reference/database-references/#document-references

original_id = ObjectId() 

db.places.insert({ 
    "_id": original_id, 
    "name": "Broadway Center", 
    "url": "bc.example.net" 
}) 

db.people.insert({ 
    "name": "Erin", 
    "places_id": original_id, 
    "url": "bc.example.net/Erin" 
}) 

を参照してください。 mongoDBのObjectIdとして "places_id"を持っていますが、POJOのStringにマッピングされていますか?

@Referenceのようなアノテーションが必要ですが、実装されていないようです。

spring-data-mongodbでこの種のアノテーションがない理由はわかりません。私は手動参照を使用するすべてのドキュメントのspring documentationに示唆されているような明示的なコンバータを実装したくありません。 それは正しいアプローチではないかもしれません。

私は何かを見逃しましたか?

UPDATE:

私の代わりのObjectIdの文字列のみを使用してPOJOを持っているという考えが好き。

@Document 
public class Place { 
    @Id 
    private String id; 
    private String name; 
} 

place.getId()は文字列になりますが、people.getPlaceId()は、ObjectIdが次のようになりますのは、私はこのようなクラス場所を持っているとしましょう。私はこの不要なマッピングを避けたい。

答えて

0

フィールドをObjectIdとして残してみませんか?あなたはこの分野で照会したい場合は

@Document 
public class People { 

    private String name; 
    private ObjectId placesId; 
    private String url; 
} 

あなたはこれを行うことができます:単一文字列のリスト

List<String> ids // the ids as strings 
List<ObjectId> objIds = ids .stream() 
          .map(i -> new ObjectId(i)) 
          .collect(Collectors.toList()); 
  • については

    • String id // single id 
      ObjectId objId = new ObjectId(id); 
      
  • +0

    ありがとうございました。私はこのマッピングを避けたいので、私の質問をより詳細に更新しました。しかし、あなたが示唆していることは働いています。 –

    +0

    残念ながら、特定のアノテーションはまだ提供されていません。フィールド['_id'はマッピングレイヤで処理されます](https://docs.spring.io/spring-data/mongodb/docs/current/reference/html/#mongo-template.id-handling)。 _ MappingMongoConverterを使用すると、Javaクラスのプロパティがこの_idフィールドにマップされる方法を制御する特定の規則があります_ –

    +0

    しかし、あなたは 'MappingMongoConverter' –

    0

    データベース内の他のオブジェクトを実際に参照する場合はSpring Dataで提供される@DBRef注釈を使用してください。

    更新されたコードは、次のようになります。

    @Document 
    public class People { 
    
        private String name; 
    
        @DBRef 
        private Place place; 
        private String url; 
    } 
    

    春データは、自動的にあなたのPeopleオブジェクトへPlaceオブジェクトをマップします。内部的にはこれはユニークなObjectIdへの参照で行われます。このコードを試して、あなたのmongoデータベースを見てください。

    詳細については、をご覧ください。MongoDb with java foreign key

    関連する問題