关于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
浙公网安备 33010602011771号