MongoDBには、クライアントとコードの2種類のドキュメントがあります。各コードは1つのクライアントを参照します。クライアントは管理者が明示的に保存する必要があるため、個別に保存する必要があり、コードドキュメントに入れることはできません。
code -> client
現在、MongoDB / MorphiaはクライアントのテクニカルIDをObjectIdとして保存しますが、コードはタイプStringのテクニカルIDを持つクライアントを参照します。指定されたクライアントIDでコードを検索できますが、Morphiaがクライアントを挿入できないため、実行時にエラーメッセージが表示されます。IDタイプが異なるためだと思います。
code { client.$id: String }
client { _id: ObjectId }
これを修正する方法はありますか?
例外
com.google.code.morphia.mapping.MappingException:参照({"$ ref": "clients"、 "$ id": "123456789abcdef"})をorg.example.Code.clientに対してフェッチできませんでした
インターネット上で、その例外メッセージを見つけました。モデルではStringの代わりにObjectIdを使用することが提案されましたが、Stringを使用する必要があります。これは私自身のプロジェクトではありません。
エンティティ:
@Entity("codes")
public class Code implements Comparable<Code> {
@Id
private String id;
@Reference
private Client client;
[...]
}
@Entity("clients")
public class Client {
@Id
private String id;
}
保管:
私が使用するオブジェクトを保存するためにcom.google.code.morphia.dao.DAO.save(T entity)
。
探す:
public class CodeRepository extends BasicDAO<Code, String> {
[... constructor ...]
@Override
public Code findByCode(String type, String clientId, String code) {
return findOne(createQuery()
.field("type")
.equal(type)
.field("value")
.equal(code)
.field("client")
.equal(new Key<Client>(Client.class, clientId)));
}
}