从mongo doc获得一个pojo

时间:2014-03-14 15:25:27

标签: mongodb morphia

我使用morphia和mongodb 我需要从mongo doc获得一个pojo 与数据库的连接运作良好 我有一个包含数据库字段,getter和setter的类。

当我执行以下代码时:

public class TestCon extends HttpServlet{

  protected void doGet(HttpServletRequest req, HttpServletResponse res)
                                   throws ServletException, IOException { 
      Morphia morphia=new Morphia();
      MongoClient  mongoClient = new MongoClient( "192.168.1.254" , 27017 );
      DB db = mongoClient.getDB( "syslog" );  
      Set<String> tables = db.getCollectionNames();
      for(String coll : tables){
          PrintWriter writer = res.getWriter();
          writer.println(coll);
      }

      BasicDBObject idObj=new BasicDBObject ("_id", new ObjectId("531f28101ad8f9ef25000001"));

      BasicDBObject  obj=(BasicDBObject) db.getCollection("tables").findOne(idObj);

      MappingMorphia  mapping=morphia.fromDBObject(MappingMorphia.class,obj);                  
  }
}

执行后,代码会生成此异常:

  

com.google.code.morphia.mapping.MappingException:尝试映射到未映射的类:MappingMorphia

     

com.google.code.morphia.Morphia.fromDBObject(Morphia.java:123)

     

com.google.code.morphia.Morphia.fromDBObject(Morphia.java:118)

     

TestCon.doGet(TestCon.java:37)

     

javax.servlet.http.HttpServlet.service(HttpServlet.java:621)

     

javax.servlet.http.HttpServlet.service(HttpServlet.java:728)

     

org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:33)

1 个答案:

答案 0 :(得分:0)

为什么使用fromDBObject()而不是查询?

datastore.get(MappingMorphia.class, new ObjectId("531f28101ad8f9ef25000001"))

如果您没有显式调用morphia.map(MappingMorphia.class),那么您的代码将无法运行,因为morphia不知道该类是什么。如果你调用get(),morphia会在运行查询之前识别出它不知道该类并且懒惰映射它。

但严重的是,你永远不应该手动调用fromDBObject()。如果你这样做,你可能会有一个非常破碎的设计。

相关问题