morphia将数据存入mongodb数据库,报错:···morphia.mapping. ···No usable constructor for com.XX.XX.XX

本文解决了一个关于使用Morphia操作MongoDB时遇到的MappingException错误,具体表现为找不到User类的合适构造器。问题的原因在于User类缺少了无参构造器,文章提供了修复方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

morphia操作mongodb报错:

org.mongodb.morphia.mapping.MappingException: No usable constructor for com.XX.XX.model.User

原因:

是因为User这个类没有可用的构造器,也就是说,找不到对应的构造函数。

User实体类的代码如下:

public static String addUser(Long userId, TraceReq traceReq) throws Exception {
    try {
        //根据UserId找到该条记录,如果没有,则新增一条

        Query<User> query = ds.createQuery(User.class)
                .field("userId").equal(userId);
        UpdateOperations<User> ops = ds.createUpdateOperations(User.class)
                .set("Id", new ObjectId())
                ..........................(省略)
                ;
        User user = ds.findAndModify(query, ops, false, true);

        return ObjectMapper.getMapper().valueToTree(user));
    } catch (Exception e) {
        throw e;
    }
}
通过增加断点,知道,在User user =ds.findAndModify(query, ops,false,true);这一句抛出了异常,从try catch中捕获异常:








原因是:User这个类找不到合适的构造器,也就是说User这个类没有无参构造器。

肯定是User这个类写了其他的构造器,这样的话就得将无参构造器写出来,不然肯定不行。

以前我一直以为,这种情况下,如果不写入无参构造器编译器肯定会报错原来编译器是不会报错的,需要自己注意,需要自己注意,需要自己注意,重要的事情说三遍。

User实体类代码如下:


要将无参构造函数,写出来:






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值