关于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