我试图使用Java将整个Java对象插入MongoDB集合.我发现以下错误:

Error :

Exception in thread "main" java.lang.IllegalArgumentException: can't serialize class net.yogesh.test.Employee
    at org.bson.BSONEncoder._putObjectField(BSONEncoder.java:185)
    at org.bson.BSONEncoder.putObject(BSONEncoder.java:119)
    at org.bson.BSONEncoder.putObject(BSONEncoder.java:65)
    at com.mongodb.DBApiLayer$MyCollection.insert(DBApiLayer.java:176)
    at com.mongodb.DBApiLayer$MyCollection.insert(DBApiLayer.java:134)
    at com.mongodb.DBApiLayer$MyCollection.insert(DBApiLayer.java:129)
    at com.mongodb.DBCollection.save(DBCollection.java:418)
    at net.yogesh.test.test.main(test.java:31)

Emplyoee.java (POJO)

package net.yogesh.test;

import java.io.Serializable;

public class Employee implements Serializable {

    private static final long serialVersionUID = 1L;
    private long no;
    private String name;

    public Employee() {
    }

    public long getNo() {
        return no;
    }

    public void setNo(long no) {
        this.no = no;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

}

Main Method Class (test.java)

package net.yogesh.test;

import java.net.UnknownHostException;

import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.Mongo;
import com.mongodb.MongoException;

public class test {

    public static void main(String[] args) throws UnknownHostException,
            MongoException {

        Mongo mongo = new Mongo("localhost", 27017);
        DB db = mongo.getDB("test");

        Employee employee = new Employee();
        employee.setNo(1L);
        employee.setName("yogesh");


        BasicDBObject basicDBObject = new BasicDBObject("Name", employee);

        DBCollection dbCollection = db.getCollection("NameColl");

        dbCollection.save(basicDBObject);   

    }

}

有人能解释我为什么会犯这个错误吗?

推荐答案

我有点困惑,为什么你会认为这会在第一时间起作用.您需要知道的第一件事是如何将POJO映射到MongoDB文档.目前,你没有告诉系统(你的代码)如何做到这一点.

您可以为此使用映射库(脑海中浮现出Morphia),也可以使用ReflectionDBObject.这两种解决方案都允许您将POJO映射到MongoDB文档,或将MongoDB文档映射到POJO(前者比后者好得多).

Mongodb相关问答推荐

MongoDB更新对象数组

Spring数据MongoDB(聚合)

减法聚合Mongo文档Golang

聚合 $accumulator + $project

如何将交易列表变成 token 数量的对象?

MongoDB 存储大量指标/分析数据的方法

Spring Data + MongoDB GridFS 可以通过 Repository 访问吗?

node.js & express - 应用程序 struct 的全局模块和最佳实践

为什么mongodb的文档中存储键名

更新 mongoengine 中的嵌入文档列表

MongoDB 是否重用已删除的空间?

mongodump 是否锁定数据库?

mongodb 模式设计命名约定

Node.js 和 MongoDB,重用 DB 对象

从性能Angular 来看 MongoDB 嵌入式与参考

为什么使用 Redis 而不是 MongoDb 进行缓存?

Mongodb 设计,嵌入与关系

无法使用命令写入模式错误,降级到兼容模式

mongo dbname --eval 'db.collection.find()' 不起作用

Spring Data MongoDB - 在哪里以编程方式为 Mongo 集合创建索引?