mongo-java-driver 在实体中用String类型的id主键,读取mongodb中ObjectId类型主键

马丁路德国王 发布于 2017/12/01 20:07
阅读 2K+
收藏 0

华为云11月刊推送:DIY微信问答机器人,高性能计算代码的20个技巧!>>>

各位好,我有个问题找了两天都没有答案,极其诚恳的请教各位,描述如下:

假设一条数据在Mongodb中表示如下:

{ 
"_id" : ObjectId("5a1e8e10cf40cb2b6b08112f")
}

在C#里面,我们可以这么写,将主键定义为string类型,然后加上[BsonRepresentation(BsonType.ObjectId)] 特性,就可以正常的查询和处理mongodb中ObjectId类型的文档了

[BsonIgnoreExtraElements]
    public class ElapsedTimeLog : IEntity<string>
    {
        /// <summary>
        /// 主键ID
        /// </summary>
        [BsonId]
        [BsonRepresentation(BsonType.ObjectId)]
        public string ID { get; set; }
     }

 

但是在 java 中,没有找到类似 BsonRepresentation 的注解,如果将主键声明为 String 类型的话,就会在查询时提示映射错误,实体类定义如下:

public class User_ObjectID implements EntityStringKey {
    //
    @BsonId
    private String id;

    //#region 
    public String getId(){return id;}

    public void setId(String id){this.id = id;}
    //#endregion
}

错误信息如下:

An exception occurred when decoding using the AutomaticPojoCodec.
Decoding into a 'User_ObjectID' failed with the following exception:

Failed to decode '_id'. readString can only be called when CurrentBSONType is STRING, not when CurrentBSONType is OBJECT_ID.

A custom Codec or PojoCodec may need to be explicitly configured and registered to handle this type.

请问各位该怎么处理?(PS:我知道在 java 中可以把主键改为 ObjectId 类型来解决,但是我想用String类型来处理,就跟C#一样)

万分感谢

加载中
返回顶部
顶部