Я кодирую систему, используя Google App Engine, и мне нужно поместить объект в хранилище данных, только если он еще не существует.Я был бы в порядке, используя метод datastore.put()
, за исключением того, что мне нужно знать, существовал ли этот объект для подсчета количества новых объектов, которые у меня есть.
Насколько я знаю, у меня есть следующие варианты (предположим, что яиметь ключ как атрибут и как ключ сущности):
private Entity getEntity(String key)
{
DatastoreService datastore =
DatastoreServiceFactory.getDatastoreService();
// Build a query to select this entity from the database:
Query q = new Query("MyEntity");
q.setKeysOnly();
// Add a filter for the key attribute:
q.addFilter("key", Query.FilterOperator.EQUAL, key);
PreparedQuery pq = datastore.prepare(q);
// Select a single entity from the database
// (there should be no more than one matching row anyway):
List<Entity> list = pq.asList(FetchOptions.Builder.withLimit(1));
if (!list.isEmpty())
// Return the found entity:
return list.get(0);
else
return null;
}
или
private Entity getEntity(String key)
{
DatastoreService datastore =
DatastoreServiceFactory.getDatastoreService();
// Get a key that matches this entity:
Key key = KeyFactory.createKey("MyEntity", key);
try {
return datastore.get(key);
} catch (EntityNotFoundException e) {
// Entity does not exist in DB:
return null;
}
}
Я склонен использовать второй, так как он кажется более простым, ноЯ обеспокоен тем, что он не может быть использован таким образом, поскольку он вызывает исключение, и это может привести к накладным расходам.
Какой из методов лучше проверить, существует ли сущность в базе данных?
Есть ли лучший способ сделать это?