使用Spring Data和MongoDB的IllegalArgumentException

时间:2017-09-20 11:33:47

标签: java spring mongodb spring-data

我们在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。感谢所有帮助过的人。

0 个答案:

没有答案