Я использую Morphia и DAO Class. У меня есть класс с Id ObjectId:Java MongoDB Morphia: найти объект ObjectId id
@Entity
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class GeoProfileVo extends ResponseVo implements Serializable{
private static final long serialVersionUID = -4975628041316056892L;
@Id private ObjectId id;
private String email;
private String name;
private String city;
//Getters, Setters and toString
}
GeoProfileDAO:
public class GeoProfileDAO extends BasicDAO<GeoProfileVo, ObjectId>{
public GeoProfileDAO(Morphia morphia, MongoClient mongoClient, String db) {
super(mongoClient, morphia, db);
}
public GeoProfileVo findByNme(String name){
return getDs().find(GeoProfileVo.class, "name", name).get();
}
//Here is the problem
public GeoProfileVo findById (ObjectId id){
//return getDs().find(GeoProfileVo.class).field("id").equal(id).get();
return getDs().get(GeoProfileVo.class, id);
}
public ObjectId saveGeoProfile(GeoProfileVo geoProfileVo){
return (ObjectId) getDs().save(geoProfileVo).getId();
}
}
Моя_служба:
public class GeolocationService implements Serializable{
private static final long serialVersionUID = 2071937170723089158L;
/** The Constant log. */
private static final Logger LOGGER = Logger.getLogger(GeolocationService.class.getName());
private MongoClient mongoClient;
private GeoProfileDAO geoProfileDAO;
public GeolocationService(){
super();
LOGGER.info("[GeolocationService - Constructor] - init");
//mongoClient:
mongoClient = new MongoClient("localhost",27017);
//morphia:
Morphia morphia = new Morphia();
morphia.map(GeoProfileVo.class);
//morphia dao:
geoProfileDAO = new GeoProfileDAO(morphia, mongoClient, "mydb");
}
public GeoProfileVo updateGeoProfile(GeoProfileVo geoProfileVo) throws GeoProfileNotFoundException{
LOGGER.info("[GeolocationService - updateGeoProfile] - init");
long currentSystemTime=System.currentTimeMillis();
if(geoProfileVo == null){
LOGGER.error("[GeolocationService - updateGeoProfile] - geoProfileVo cannot be null");
throw new IllegalArgumentException();
}
if(geoProfileVo.getId() == null){
LOGGER.error("[GeolocationService - updateGeoProfile] - ID cannot be null");
throw new IllegalArgumentException();
}
GeoProfileVo geoProfileVoEntity = geoProfileDAO.findById(geoProfileVo.getId());
if(geoProfileVoEntity==null){
LOGGER.error("[GeolocationService - updateGeoProfile] - geoProfileVo not found in BD");
throw new GeoProfileNotFoundException();
}
LOGGER.debug("[GeolocationService - updateGeoProfile] - Finish Timing:"+(System.currentTimeMillis()-currentSystemTime));
return geoProfileDAO.updateGeoProfile(geoProfileVo);
}
//CRUD
}
Я могу искать по электронной почте, имя или город, вставить объект в BD, но я не могу выполнить поиск по id. В google я только нахожу информацию о идентификаторе String, и я не нахожу много информации об идентификаторе типа ObjectId. когда я пытаюсь найти идентификатор ObjectId, он ничего не находит и возвращает null.
Например, когда я найти по электронной почте, возвращается:
{
"id": {
"timestamp": 1432028968,
"machineIdentifier": 9913253,
"processIdentifier": 7516,
"counter": 8215016
},
"email": "[email protected]",
"name": "john",
"city": "Madrid"
}
я называю WS, который называют в createGeoProfile службу с тем же объект с тем же идентификатором, но в Eclipse IDE, «ID» отличается в каждом вызове. Может быть, проблема здесь, но я этого не понимаю.
Как найти объект с идентификатором типа ObjectId?
Вы можете использовать 'ObjectId ObjectId = новый ObjectId ("ВАШ ID");' или Stringid = «ВАШ ID "и" return getDs(). get (GeoProfileVo.class, stringId); ' –
Извините, но я не знаю, где находится« ВАШ ИД »или найти его. Я видел это сообщение, но это 4 года назад, и это не знак как разрешенный. – josekron
Не похоже, что ваши объекты сохраняются должным образом. Не должно быть поля под названием «geoProfileVo» в сохраненном документе Morphia. И ObjectId также не сохраняется должным образом. Он должен быть ObjectId в bson в оболочке. Что-то определенно неправильно здесь, но это не похоже на то, что Морфия находится в центре этого. – evanchooly