Если вы находите по идентификатору, а идентификатор предоставляется пользователем (это означает, что это могут быть данные любого типа), вам не следует использовать решения, приведенные выше.
Как объяснено в документации , ObjectId состоит из 12 байтов , поэтому, если вы передадите что-то еще в new ObjectId(myValue)
, ваш код выдаст IllegalArgumentException
.
Вот как я реализовал метод поиска по идентификатору:
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;
}