我们在Spring Boot应用程序中使用MongoDB和Spring Data。另一位开发人员早先使用MongoTemplate的findAndModify方法和一些使用该服务的其他代码编写了一个服务。即使在生产中,它也能很好地工作。
我已经分支并继续添加一些新功能(全新代码)并需要调用该服务。服务对我不起作用,即使我甚至没有触及服务代码。而且,即使是其他人之前编写的代码(它是一个调用服务的REST控制器)现在也不起作用。在主分支上,一切都像它应该的那样。
这是服务:
@Autowired
private MongoTemplate mongo;
public void addRetention(Date when, String userId, Platform platform) {
LocalDateTime dateTime = LocalDateTime.ofEpochSecond(when.getTime()/1000, 0, ZoneOffset.UTC);
int yyyymm = 100 * dateTime.getYear() + dateTime.getMonthValue();
Retention r = mongo.findAndModify( // the exception is coming from this line
new Query(Criteria.where("userId").is(userId).and("yyyymm").is(yyyymm)),
new Update().inc("count", 1).set("platform", platform),
new FindAndModifyOptions().upsert(true).returnNew(true), Retention.class
);
addRealTimeRetention(userId, r, yyyymm);
}
我如何致电服务:
retentionService.addRetention(timeService.timeToUtil(usage2.getDate()),
usage2.getUserId(), platform);
PasteBin上的stack trace。异常消息是:
IllegalArgumentException: Target bean is not of type of the persistent entity!
编辑:这是Retention.java类:
@Document
@JsonInclude(JsonInclude.Include.NON_NULL)
@CompoundIndexes({
@CompoundIndex(name = "userid_yyyymm_idx", def = "{ userId: 1, yyyymm: 1 }")
})
public class Retention {
@Id
private String id;
@Indexed
private String userId;
@Indexed
private int yyyymm;
private int count;
private Platform platform;
// setters and getters...
}
最终编辑:我通过删除pom.xml中的spring devtools依赖项解决了这个问题。我不确定该依赖关系如何与此异常有关。找到了解决方案here。感谢所有帮助过的人。