Actually...
You are looking at the wrong place...
@throws PersistenceException if the flush fails
which means...you are looking at the "Flush" method, not at the "getReference"...
The Specification for the "Flush" is right after the "getReference" so i guess you just
thought the specified method is followed but the details...but is the opposite, in the
specification, first you find the explanation and then the method.
getReference Method
/**
* Get an instance, whose state may be lazily fetched.
* If the requested instance does not exist in the database,
* the EntityNotFoundException is thrown when the instance
* state is first accessed. (The persistence provider runtime is
* permitted to throw the EntityNotFoundException when
* getReference is called.)
* The application should not expect that the instance state will
* be available upon detachment, unless it was accessed by the
* application while the entity manager was open.
* @param entityClass
* @param primaryKey
* @return the found entity instance
* @throws IllegalArgumentException if the first argument does
* not denote an entity type or the second
* argument is not a valid type for that
* entity’s primary key
* @throws EntityNotFoundException if the entity state
* cannot be accessed
*/
public <T> T getReference(Class<T> entityClass, Object primaryKey);
flush Method
/**
* Synchronize the persistence context to the
* underlying database.
* @throws TransactionRequiredException if there is
* no transaction
* @throws PersistenceException if the flush fails
*/
public void flush();
Therefore, option (C) is correct ;)
Cheers,
Dave