关于springdata-mongodb的实体类中List<T>类型的字段的T.id

先看下实体类格式
@Document("flow_data")
public class FlowData {

    @ApiModelProperty("主键id")
    private ObjectId id;//ID

    @ApiModelProperty("审批编号")
    @Indexed
    private String flowNo;//审批编号

    @ApiModelProperty("是否是合同关联审批")
    private Integer isContract;//是否是合同关联审批
    
    //省略 。。。。。

    @ApiModelProperty("员工姓名")
    @Transient
    private String userName;//员工姓名

    @ApiModelProperty("评论")
    private List<FlowCmnt> comments;

    @ApiModelProperty("发起设备")
    private String device;//发起设备
}

  

@ApiModel("流程评论")
public class FlowCmnt {
    @ApiModelProperty
    private ObjectId id;
    @ApiModelProperty("评论人userId")
    private Integer userId;
    @ApiModelProperty("评论人姓名")
    @Transient
    private String userName;
    @ApiModelProperty("评论内容")
    private String content;
    @ApiModelProperty("文件地址url,用逗号隔开")
    private String fileUrls;
    @ApiModelProperty("评价时间")
    private Long time;
    @ApiModelProperty("是否撤销 0正常 1撤销")
    private Integer isRevocation;
    @ApiModelProperty("撤销时间")
    private Long rvctnTime;
}

  

昨天为了对应新的需求在原本的实体类的基础上添加了一个List<T>类型的字段: List<FlowCmnt> comments;

在做查询的时候怎么都查询不到,最后到数据库中查看发现发现FlowCmnt实体类中的【ObjectId id】这个字段变成了mongodb中主键id特有的形式【_id】,随即修改了query的写法

query.addCriteria(Criteria.where("comments.id").is(id));
修改成
query.addCriteria(Criteria.where("comments._id").is(id));
就可以查到了,但是做修改条件时,却怎么也修改不了,所以不建议将【ObjectId id】作为对象类型字段的唯一标识,即最好是FlowCmnt的ObjectId id改成String xxxId

  

posted @ 2021-11-26 16:11  菜菜菜鸟秦  阅读(261)  评论(0)    收藏  举报