Dar*_*nik 7 java mongodb morphia
我有一个名为 Signal 的简单类。类如下所示:
public class Signal {
private String id;
private Date timestamp;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public Date getTimestamp() {
return timestamp;
}
public void setTimestamp(Date timestamp) {
this.timestamp = timestamp;
}
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试在 MongoDB (v3.4) 中插入信号。我使用以下方法插入:
public boolean xyz(Signal signal) {
try {
DatabaseConnection databaseConnection =DatabaseConnection.getInstance();
MongoClient mongoClient = databaseConnection.getMongoClient();
MongoDatabase db = mongoClient.getDatabase("myDb");
MongoCollection<Signal> collection = db.getCollection("myCollection", Signal.class);
collection.insertOne(signal);
return true;
} catch (Exception e){
logger.error("Error", e);
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
我收到以下异常:
org.bson.codecs.configuration.CodecConfigurationException:找不到类 in.co.mysite.webapi.models.Signal 的编解码器。
我在这里检查了一个类似的问题,但插入代码不同。我从答案中得到了提示并修改了我的方法,但它看起来并不干净。修改方法如下:
public boolean xyz(Signal signal) {
try {
DatabaseConnection databaseConnection =DatabaseConnection.getInstance();
MongoClient mongoClient = databaseConnection.getMongoClient();
MongoDatabase db = mongoClient.getDatabase("myDb");
MongoCollection<Document> collection = db.getCollection("myCollection");
Document doc = new Document();
doc.put("id", signal.getId());
doc.put("timestamp", signal.getTimestamp());
doc.put("_id", new ObjectId().toString());
collection.insertOne(doc);
return true;
} catch (Exception e){
logger.error("Error", e);
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
您需要配置一个CodecRegistry
来管理从 bson 到您的 pojo 的翻译:
MongoClientURI connectionString = new MongoClientURI("mongodb://localhost:27017");
MongoClient mongoClient = new MongoClient(connectionString);
CodecRegistry pojoCodecRegistry = org.bson.codecs.configuration.CodecRegistries.fromRegistries(MongoClientSettings.getDefaultCodecRegistry(), org.bson.codecs.configuration.CodecRegistries.fromProviders(PojoCodecProvider.builder().automatic(true).build()));
MongoDatabase database = mongoClient.getDatabase("testdb").withCodecRegistry(pojoCodecRegistry);
Run Code Online (Sandbox Code Playgroud)
PS:您可以静态导入org.bson.codecs.configuration.CodecRegistries.fromRegistries
和org.bson.codecs.configuration.CodecRegistries.fromProviders
.
一个完整的例子可以在github 中找到。
在MongoDB的Java驱动程序文件还包含有关管理的POJO(链接是3.8.0驱动程序版本)的文章。
归档时间: |
|
查看次数: |
20117 次 |
最近记录: |