2012-01-17 79 views
0

基本上我log4mongo是記錄用戶的活動,我想選擇 一個用戶和查看他的日誌條目,HOWTO映射log4mongo文檔到Java對象

此代碼工作確定

BasicDBObject blogEntryDbObj = (BasicDBObject) 
mongo.getDB().getCollection("log").findOne(new BasicDBObject("_id", 
new ObjectId(blogEntryId))); 

但在這裏即時得到錯誤「試圖映射到一個未映射類:

log = morphia.fromDBObject(log.class, blogEntryDbObj); 

package名字是什麼了logç lass或者可能 是無關緊要的。我意識到可能我的POJO沒有正確設置
但我無法弄清楚什麼是錯的。

log4mongo文檔看起來像這樣。

{ 
    "_id" : ObjectId("4eecf4e4f9cb90f308193614"), 
    "timestamp" : new Date("Sat, 17 Dec 2011 21:00:36 GMT +01:00"), 
    "level" : "INFO", 
    "thread" : "Server.Connection:146.53.243.167:4570", 
    "message" : "setting RegistrationId for: zambe", 
    "loggerName" : { 
    "fullyQualifiedClassName" : "zambe.afa8cc37-4796-49c1- 
a175-05a8daf0a88c", 
    "package" : ["zambe", "afa8cc37-4796-49c1-a175-05a8daf0a88c"], 
    "className" : "afa8cc37-4796-49c1-a175-05a8daf0a88c" 
    }, 
    "fileName" : "PushUpdateRegistrationId.java", 
    "method" : "connect", 
    "lineNumber" : "61", 
    "class" : { 
    "fullyQualifiedClassName" : 
"com.carlsberg.server.PushUpdateRegistrationId", 
    "package" : ["com", "carlsberg", "server", 
"PushUpdateRegistrationId"], 
    "className" : "PushUpdateRegistrationId" 
    }, 
    "host" : { 
    "process" : "[email protected]", 
    "name" : "ERIKSWEDMINI", 
    "ip" : "192.168.1.150" 
    } 
} 

這裏是我的POJO我嘗試映射到

@Entity(value = "log") 
public class log 
{ 
    @Id private ObjectId id; 
    Date timestamp; 
    Level level; 
    String thread; 
    String message; 

    @Embedded 
    LoggerName loggerName; 

    String fileName; 
    String method; 
    String lineNumber; 

    @Embedded("class") 
    LoggerClass loggerClass; 

    @Embedded 
    MyHost host; 
} 

@Entity(noClassnameStored=true) 
@Embedded 
class LoggerName 
{ 
    String fullyQualifiedClassName; 
    @Property("package") 
    String[] _package; 
    String className; 

} 

@Entity(noClassnameStored=true) 
@Embedded 
class LoggerClass 
{ 
    String fullyQualifiedClassName; 
    @Property("package") 
    String[] _package; 
    String className; 

} 

@Entity(noClassnameStored=true) 
@Embedded 
class MyHost 
{ 
    String process; 
    String name; 
    String ip; 
} 
+1

你是否先映射了你的日誌類? http://code.google.com/p/morphia/wiki/MappingObjects – Nat

+0

@Nat不,我沒有,我把它映射到錯誤的地方。現在它正在工作。發佈答案,我會接受它。 「mapping是實例方法,你需要將它映射到Morphia的同一個實例上,以便從DBObject中獲得工作。」 – Erik

回答

1

morphia.map是實例方法。你需要morphia.map它在Morphia的同一個實例上得到morphia.fromDBObject才能工作