通过Id查询Morphia

时间:2010-12-17 06:58:03

标签: java mongodb morphia

我正在使用Morphia,MongoDB的Pojo映射器,我觉得很难在我看来应该很简单的任务:通过id获取一个对象。我能够找到集合中的所有对象,但我无法弄清楚使用从列表中获取的id查询的简单任务。我其实在谈论ObjectId。如果我尝试用JSON渲染它,我会看到

3 个答案:

答案 0 :(得分:14)

这个问题似乎不完整。

似乎问题的答案在Morphia QuickStart page上。似乎很简单如下。

Datastore ds = morphia.createDatastore("testDB");
String hotelId = ...; // the ID of the hotel we want to load
// and then map it to our Hotel object
Hotel hotel = ds.get(Hotel.class, hotelId);

所以你肯定需要更多细节。

答案 1 :(得分:8)

Datastore ds = morphia.createDatastore("testDB");
String hotelId = "516d41150364a6a6697136c0"; // the ID of the hotel we want to load
ObjectId objectId = new ObjectId(hotelId);
// and then map it to our Hotel object
Hotel hotel = ds.get(Hotel.class, objectId);

答案 2 :(得分:6)

如果你是通过id找到并且id是由用户提供的(意味着它可以是任何类型的数据),你就不应该使用上面给出的解决方案。

正如documentation中所述,ObjectId 包含12个字节,因此如果您将其他内容传递给new ObjectId(myValue),您的代码将抛出IllegalArgumentException

以下是我通过id实现查找方法的方法:

public Model findById(String id) throws NotFoundException {
    if (!ObjectId.isValid(id)) {
        throw new NotFoundException();
    }

    ObjectId oid = new ObjectId(id);
    Model m = datastore().find(Model.class).field("_id").equal(oid).get();
    if (m == null) {
        throw new NotFoundException();
    }
    return m;
}