2014-05-15 54 views
1

我有這種類型的本記錄我的收藏裏無法從MongoDB的結果Java自定義對象映射

{ 
    "_id": { 
     "$oid": "537470dce4b067b395ba47f2" 
    }, 
    "symbol": "CMC", 
    "tvol": 76.97 
} 

在檢索結果,我無法映射到我的自定義對象 這是我的客戶端程序

public class Data { 
    public static void main(String[] args) { 
     try { 

      String textUri = "mongodb://admin:[email protected]:43388/stocks"; 
      MongoURI uri = new MongoURI(textUri); 
      Mongo m = new Mongo(uri); 
      DB db = m.getDB("stocks"); 
      DBCollection table = db.getCollection("stock"); 
      BasicDBObject searchQuery = new BasicDBObject(); 
      DBCursor cursor = table.find(searchQuery); 
      while (cursor.hasNext()) { 
      Security sec = (Security) cursor.next(); 
      System.out.println(sec.getSymbol()); 
      } 
     } catch (UnknownHostException e) { 
      e.printStackTrace(); 
     } catch (MongoException e) { 
      e.printStackTrace(); 
     } 

    } 
} 

Security.java

package com; 

import com.mongodb.BasicDBObject; 

public class Security extends BasicDBObject { 

    public Security() { 

    } 

    private String symbol; 

    public String getSymbol() { 
     return symbol; 
    } 

    public void setSymbol(String symbol) { 
     this.symbol = symbol; 
    } 

} 

這是我得到的例外。

Exception in thread "main" java.lang.ClassCastException: com.mongodb.BasicDBObject cannot be cast to com.Security 
    at com.Data.main(Data.java:25) 
+0

你要買什麼呢?似乎你正在尋找股票。並使用搜索作爲BasicDbObject並將結果分配給安全性?這裏的安全性如何? – Mani

+0

儘管我爲我的dto使用了相同的名稱股票,但它引發了異常。 – Pawan

+0

你的意思是「使用同一個名字」? - 你是如何將記錄插入到mongodb中的? – Mani

回答

3

你需要告訴司機實例,嘗試加入這一行,你運行你的發現(前)什麼類:

table.setObjectClass(Security.class); 

您對您的安全類干將是不是真的在這裏完成,你需要做這樣的事情:

public String getSymbol() { 
    return getString("symbol"); 
} 
+0

非常好的答案,非常感謝,我一直在爲此而努力。 – Pawan

1

當MongoDB驅動程序返回它返回爲一個對象的BasicDBObject默認是一種Map。

,如果你想以檢索爲自己的Java POJO,你必須實現DBOBJECT接口

Reference

你是在擴展BasicDBObject在內部實施DBOBJECT,讓你在這方面的罰款。

但是你已經明確地告訴蒙戈爲安全返回作爲

collection.setObjectClass(Security.class);