code: @Override
  	public void setCurrent(T stateful, State<T> current, State<T> next) throws StaleStateException {
  		try {
  
  			// Has this Entity been persisted to the database?
  			//
  			Object id = getId(stateful);
  			if (id != null && entityManager.contains(stateful)) {
  				updateStateInDB(stateful, current, next, id);
  				setState(stateful, next.getName());
  			} else {
  				updateStateInMemory(stateful, current, next);
  			}
  		} catch (NoSuchFieldException e) {
  			throw new RuntimeException(e);
  		} catch (SecurityException e) {
  			throw new RuntimeException(e);
  		} catch (IllegalArgumentException e) {
  			throw new RuntimeException(e);
  		} catch (IllegalAccessException e) {
  			throw new RuntimeException(e);
  		}
  	}
docs: Set the current State.  This method will ensure that the state in the db matches the expected current state.
  If not, it will throw a StateStateException
  
  @param stateful Stateful Entity
  @param current Expected current State
  @param next The value of the next State
  @throws StaleStateException thrown if the value of the State does not equal to the provided current State