package com.googlecode.objectify.cmd;
/**
* <p>Element in the command chain for deferred saving of entities. Note that all methods return void;
* there is no way to force synchronous execution.</p>
*
* @author Jeff Schnitzer <jeff@infohazard.org>
*/
public interface DeferredSaver
{
/**
* <p>Save a single entity in the datastore at the end of the current unit-of-work.</p>
*
* <p>This method can be called multiple times on a single entity; that will produce a single save.
* If deferred saves and deletes are applied to an entity, the last one wins.<p>
*
* <p>If the entity has a null Long id, the value will be autogenerated and populated on the entity object
* when the operation completes. Since this is a deferred operation, that will be past the end of your
* unit-of-work (transaction boundary).</p>
*
* <p>Saves do not cascade.</p>
*
* @param entity must be a registered entity type
*/
void entity(Object entity);
/**
* <p>Save a batch of entities in the datastore at the end of the current unit-of-work.</p>
*
* <p>This method can be called multiple times on a single entity; that will produce a single save.
* If deferred saves and deletes are applied to an entity, the last one wins.<p>
*
* <p>If any entities have null Long ids, the values will be autogenerated and populated on the entity objects
* when the operation completes. Since this is a deferred operation, that will be past the end of your
* unit-of-work (transaction boundary).</p>
*
* <p>Saves do not cascade.</p>
*
* @param entities must be registered entity types
*/
void entities(Iterable<?> entities);
/**
* A convenience method for entities(Iterable)
*/
void entities(Object... entities);
}