spring data jpa mongodb根据example查找不到问题

当我们用spring mongodb data 往mongodb insert一个document后,这条document的记录如下。 我们可以看到一个field为 _class,记录了java代码的className。

{ "_id" : ObjectId("5d5220f30fcc819b1495e45f"), "port" : "8081", "hostName" : "10.205.11.85", "serviceName" : "LIHAO-TEST", "eurekaServer" : "core-eureka-server-test-env-164.test.rrdbg.com", "enable" : false, "_class" : "com.hissummer.mockserver.mockplatform.EurekaMockRule" }

当我们用如下代码findAll(findOne) by example时没有任何问题。

PageRequest page = PageRequest.of(pageNumber, pageSize);
Page<EurekaMockRule> rules = null;
EurekaMockRule ruleExmple = EurekaMockRule.builder().build();
ruleExmple.setEurekaServer(StringUtils.isEmpty(requestBody.getString("eurekaServer")) ? null
: requestBody.getString("eurekaServer"));
ruleExmple.setServiceName(StringUtils.isEmpty(requestBody.getString("serviceName")) ? null
: requestBody.getString("serviceName"));
Example<EurekaMockRule> example = Example.of(ruleExmple);
rules = eurekaMockRuleRepository.findAll(example, page);

突然某一天,我们优化了代码结构,调整了该class的package 目录。 虽然查询的代码没有任何变化,但是却查找不到了数据。

经过debug发现,mongodb查找时生成的搜索条件,会加上_class 字段,因为我们新的代码的_class 的package做了调整,所以查找调整代码之前的落地的document时就再也查找不到了。 此时我们在调整document对应的java entity事需要额外的注意。

我们重新update下所有的collection的_class的值,就可以了。

db.eurekaMockrules.update({},{$set:{"_class":"com.hissummer.mockserver.mgmt.entity.EurekaMockRule"}},{"multi":true});

此篇文章已被阅读75 次

Add a Comment

邮箱地址不会被公开。 必填项已用*标注