All Downloads are FREE. Search and download functionalities are using the official Maven repository.

javax.persistence.EntityManager Maven / Gradle / Ivy

Go to download

Hibernate developmental JSR 317 (Java Persistence API 2.0) contracts. Used to allow incremental implementation of features on the way to full JPA 2.0 support.

The newest version!
// $Id: EntityManager.java 17305 2009-08-14 18:29:45Z epbernard $
// EJB3 Specification Copyright 2004-2009 Sun Microsystems, Inc.
package javax.persistence;

import java.util.Map;
import java.util.Set;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.QueryBuilder;
import javax.persistence.metamodel.Metamodel;

/**
 * Interface used to interact with the persistence context.
 */
public interface EntityManager {
	/**
	 * Make an instance managed and persistent.
	 *
	 * @param entity
	 *
	 * @throws EntityExistsException		if the entity already exists.
	 *                                      (If the entity already exists, the EntityExistsException may
	 *                                      be thrown when the persist operation is invoked, or the
	 *                                      EntityExistsException or another PersistenceException may be
	 *                                      thrown at flush or commit time.)
	 * @throws IllegalArgumentException	 if the instance is not an
	 *                                      entity
	 * @throws TransactionRequiredException if invoked on a
	 *                                      container-managed entity manager of type
	 *                                      PersistenceContextType.TRANSACTION and there is
	 *                                      no transaction.
	 */
	public void persist(Object entity);

	/**
	 * Merge the state of the given entity into the
	 * current persistence context.
	 *
	 * @param entity
	 *
	 * @return the managed instance that the state was merged to
	 *
	 * @throws IllegalArgumentException	 if instance is not an
	 *                                      entity or is a removed entity
	 * @throws TransactionRequiredException if invoked on a
	 *                                      container-managed entity manager of type
	 *                                      PersistenceContextType.TRANSACTION and there is
	 *                                      no transaction.
	 */
	public  T merge(T entity);

	/**
	 * Remove the entity instance.
	 *
	 * @param entity
	 *
	 * @throws IllegalArgumentException	 if the instance is not an
	 *                                      entity or is a detached entity
	 * @throws TransactionRequiredException if invoked on a
	 *                                      container-managed entity manager of type
	 *                                      PersistenceContextType.TRANSACTION and there is
	 *                                      no transaction.
	 */
	public void remove(Object entity);

	/**
	 * Find by primary key.
	 * Search for an entity of the specified class and primary key.
	 * If the entity instance is contained in the persistence context
	 * it is returned from there.
	 *
	 * @param entityClass
	 * @param primaryKey
	 *
	 * @return the found entity instance or null
	 *         if the entity does not exist
	 *
	 * @throws IllegalArgumentException if the first argument does
	 *                                  not denote an entity type or the second argument is
	 *                                  is not a valid type for that entity?s primary key or
	 *                                  is null
	 */
	public  T find(Class entityClass, Object primaryKey);

	/**
	 * Find by primary key, using the specified properties.
	 * Search for an entity of the specified class and primary key.
	 * If the entity instance is contained in the persistence context
	 * it is returned from there.
	 * If a vendor-specific property or hint is not recognized,
	 * it is silently ignored.
	 *
	 * @param entityClass
	 * @param primaryKey
	 * @param properties standard and vendor-specific properties
	 *
	 * @return the found entity instance or null
	 *         if the entity does not exist
	 *
	 * @throws IllegalArgumentException if the first argument does
	 *                                  not denote an entity type or the second argument is
	 *                                  is not a valid type for that entity?s primary key or
	 *                                  is null
	 */
	public  T find(Class entityClass, Object primaryKey,
					  Map properties);

	/**
	 * Find by primary key and lock.
	 * Search for an entity of the specified class and primary key
	 * and lock it with respect to the specified lock type.
	 * If the entity instance is contained in the persistence context
	 * it is returned from there, and the effect of this method is
	 * the same as if the lock method had been called on the entity.
	 * If the entity is found within the persistence context and the
	 * lock mode type is pessimistic and the entity has a version
	 * attribute, the persistence provider must perform optimistic
	 * version checks when obtaining the database lock. If these
	 * checks fail, the OptimisticLockException will be thrown.
	 * If the lock mode type is pessimistic and the entity instance
	 * is found but cannot be locked:
	 * - the PessimisticLockException will be thrown if the database
	 * locking failure causes transaction-level rollback.
	 * - the LockTimeoutException will be thrown if the database
	 * locking failure causes only statement-level rollback
	 *
	 * @param entityClass
	 * @param primaryKey
	 * @param lockMode
	 *
	 * @return the found entity instance or null if the entity does
	 *         not exist
	 *
	 * @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 or
	 *                                      is null
	 * @throws TransactionRequiredException if there is no
	 *                                      transaction and a lock mode other than NONE is set
	 * @throws OptimisticLockException	  if the optimistic version
	 *                                      check fails
	 * @throws PessimisticLockException	 if pessimistic locking
	 *                                      fails and the transaction is rolled back
	 * @throws LockTimeoutException		 if pessimistic locking fails and
	 *                                      only the statement is rolled back
	 * @throws PersistenceException		 if an unsupported lock call
	 *                                      is made
	 */
	public  T find(Class entityClass, Object primaryKey,
					  LockModeType lockMode);

	/**
	 * Find by primary key and lock, using the specified properties.
	 * Search for an entity of the specified class and primary key
	 * and lock it with respect to the specified lock type.
	 * If the entity instance is contained in the persistence context
	 * it is returned from there. If the entity is found
	 * within the persistence context and the lock mode type
	 * is pessimistic and the entity has a version attribute, the
	 * persistence provider must perform optimistic version checks
	 * when obtaining the database lock. If these checks fail,
	 * the OptimisticLockException will be thrown.
	 * If the lock mode type is pessimistic and the entity instance
	 * is found but cannot be locked:
	 * - the PessimisticLockException will be thrown if the database
	 * locking failure causes transaction-level rollback.
	 * - the LockTimeoutException will be thrown if the database
	 * locking failure causes only statement-level rollback
	 * If a vendor-specific property or hint is not recognized,
	 * it is silently ignored.
	 * Portable applications should not rely on the standard timeout
	 * hint. Depending on the database in use and the locking
	 * mechanisms used by the provider, the hint may or may not
	 * be observed.
	 *
	 * @param entityClass
	 * @param primaryKey
	 * @param lockMode
	 * @param properties standard and vendor-specific properties
	 * and hints
	 *
	 * @return the found entity instance or null if the entity does
	 *         not exist
	 *
	 * @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 or
	 *                                      is null
	 * @throws TransactionRequiredException if there is no
	 *                                      transaction and a lock mode other than NONE is set
	 * @throws OptimisticLockException	  if the optimistic version
	 *                                      check fails
	 * @throws PessimisticLockException	 if pessimistic locking
	 *                                      fails and the transaction is rolled back
	 * @throws LockTimeoutException		 if pessimistic locking fails and
	 *                                      only the statement is rolled back
	 * @throws PersistenceException		 if an unsupported lock call
	 *                                      is made
	 */
	public  T find(Class entityClass, Object primaryKey,
					  LockModeType lockMode,
					  Map properties);

	/**
	 * 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 or
	 *                                  is null
	 * @throws EntityNotFoundException  if the entity state
	 *                                  cannot be accessed
	 */
	public  T getReference(Class entityClass,
							  Object primaryKey);

	/**
	 * Synchronize the persistence context to the
	 * underlying database.
	 *
	 * @throws TransactionRequiredException if there is
	 *                                      no transaction
	 * @throws PersistenceException		 if the flush fails
	 */
	public void flush();

	/**
	 * Set the flush mode that applies to all objects contained
	 * in the persistence context.
	 *
	 * @param flushMode
	 */
	public void setFlushMode(FlushModeType flushMode);

	/**
	 * Get the flush mode that applies to all objects contained
	 * in the persistence context.
	 *
	 * @return flushMode
	 */
	public FlushModeType getFlushMode();

	/**
	 * Lock an entity instance that is contained in the persistence
	 * context with the specified lock mode type.
	 * If a pessimistic lock mode type is specified and the entity
	 * contains a version attribute, the persistence provider must
	 * also perform optimistic version checks when obtaining the
	 * database lock. If these checks fail, the
	 * OptimisticLockException will be thrown.
	 * If the lock mode type is pessimistic and the entity instance
	 * is found but cannot be locked:
	 * - the PessimisticLockException will be thrown if the database
	 * locking failure causes transaction-level rollback.
	 * - the LockTimeoutException will be thrown if the database
	 * locking failure causes only statement-level rollback
	 *
	 * @param entity
	 * @param lockMode
	 *
	 * @throws IllegalArgumentException	 if the instance is not an
	 *                                      entity or is a detached entity
	 * @throws TransactionRequiredException if there is no
	 *                                      transaction
	 * @throws EntityNotFoundException	  if the entity does not exist
	 *                                      in the database when pessimistic locking is
	 *                                      performed
	 * @throws OptimisticLockException	  if the optimistic version
	 *                                      check fails
	 * @throws PessimisticLockException	 if pessimistic locking fails
	 *                                      and the transaction is rolled back
	 * @throws LockTimeoutException		 if pessimistic locking fails and
	 *                                      only the statement is rolled back
	 * @throws PersistenceException		 if an unsupported lock call
	 *                                      is made
	 */
	public void lock(Object entity, LockModeType lockMode);

	/**
	 * Lock an entity instance that is contained in the persistence
	 * context with the specified lock mode type and with specified
	 * properties.
	 * If a pessimistic lock mode type is specified and the entity
	 * contains a version attribute, the persistence provider must
	 * also perform optimistic version checks when obtaining the
	 * database lock. If these checks fail, the
	 * OptimisticLockException will be thrown.
	 * If the lock mode type is pessimistic and the entity instance
	 * is found but cannot be locked:
	 * - the PessimisticLockException will be thrown if the database
	 * locking failure causes transaction-level rollback.
	 * - the LockTimeoutException will be thrown if the database
	 * locking failure causes only statement-level rollback
	 * If a vendor-specific property or hint is not recognized,
	 * it is silently ignored.
	 * Portable applications should not rely on the standard timeout
	 * hint. Depending on the database in use and the locking
	 * mechanisms used by the provider, the hint may or may not
	 * be observed.
	 *
	 * @param entity
	 * @param lockMode
	 * @param properties standard and vendor-specific properties
	 * and hints
	 *
	 * @throws IllegalArgumentException	 if the instance is not an
	 *                                      entity or is a detached entity
	 * @throws TransactionRequiredException if there is no
	 *                                      transaction
	 * @throws EntityNotFoundException	  if the entity does not exist
	 *                                      in the database when pessimistic locking is
	 *                                      performed
	 * @throws OptimisticLockException	  if the optimistic version
	 *                                      check fails
	 * @throws PessimisticLockException	 if pessimistic locking fails
	 *                                      and the transaction is rolled back
	 * @throws LockTimeoutException		 if pessimistic locking fails and
	 *                                      only the statement is rolled back
	 * @throws PersistenceException		 if an unsupported lock call
	 *                                      is made
	 */
	public void lock(Object entity, LockModeType lockMode,
					 Map properties);

	/**
	 * Refresh the state of the instance from the database,
	 * overwriting changes made to the entity, if any.
	 *
	 * @param entity
	 *
	 * @throws IllegalArgumentException	 if the instance is not
	 *                                      an entity or the entity is not managed
	 * @throws TransactionRequiredException if invoked on a
	 *                                      container-managed entity manager of type
	 *                                      PersistenceContextType.TRANSACTION and there is
	 *                                      no transaction.
	 * @throws EntityNotFoundException	  if the entity no longer
	 *                                      exists in the database
	 */
	public void refresh(Object entity);

	/**
	 * Refresh the state of the instance from the database, using
	 * the specified properties, and overwriting changes made to
	 * the entity, if any.
	 * If a vendor-specific property or hint is not recognized,
	 * it is silently ignored.
	 *
	 * @param entity
	 * @param properties standard and vendor-specific properties
	 *
	 * @throws IllegalArgumentException	 if the instance is not
	 *                                      an entity or the entity is not managed
	 * @throws TransactionRequiredException if invoked on a
	 *                                      container-managed entity manager of type
	 *                                      PersistenceContextType.TRANSACTION and there is
	 *                                      no transaction.
	 * @throws EntityNotFoundException	  if the entity no longer
	 *                                      exists in the database
	 */
	public void refresh(Object entity,
						Map properties);

	/**
	 * Refresh the state of the instance from the database,
	 * overwriting changes made to the entity, if any, and
	 * lock it with respect to given lock mode type.
	 * If the lock mode type is pessimistic and the entity instance
	 * is found but cannot be locked:
	 * - the PessimisticLockException will be thrown if the database
	 * locking failure causes transaction-level rollback.
	 * - the LockTimeoutException will be thrown if the
	 * database locking failure causes only statement-level
	 * rollback.
	 *
	 * @param entity
	 * @param lockMode
	 *
	 * @throws IllegalArgumentException	 if the instance is not
	 *                                      an entity or the entity is not managed
	 * @throws TransactionRequiredException if there is no
	 *                                      transaction
	 * @throws EntityNotFoundException	  if the entity no longer exists
	 *                                      in the database
	 * @throws PessimisticLockException	 if pessimistic locking fails
	 *                                      and the transaction is rolled back
	 * @throws LockTimeoutException		 if pessimistic locking fails and
	 *                                      only the statement is rolled back
	 * @throws PersistenceException		 if an unsupported lock call
	 *                                      is made
	 */
	public void refresh(Object entity, LockModeType lockMode);

	/**
	 * Refresh the state of the instance from the database,
	 * overwriting changes made to the entity, if any, and
	 * lock it with respect to given lock mode type and with
	 * specified properties.
	 * If the lock mode type is pessimistic and the entity instance
	 * is found but cannot be locked:
	 * - the PessimisticLockException will be thrown if the database
	 * locking failure causes transaction-level rollback.
	 * - the LockTimeoutException will be thrown if the database
	 * locking failure causes only statement-level rollback
	 * If a vendor-specific property or hint is not recognized,
	 * it is silently ignored.
	 * Portable applications should not rely on the standard timeout
	 * hint. Depending on the database in use and the locking
	 * mechanisms used by the provider, the hint may or may not
	 * be observed.
	 *
	 * @param entity
	 * @param lockMode
	 * @param properties standard and vendor-specific properties
	 * and hints
	 *
	 * @throws IllegalArgumentException	 if the instance is not
	 *                                      an entity or the entity is not managed
	 * @throws TransactionRequiredException if there is no
	 *                                      transaction
	 * @throws EntityNotFoundException	  if the entity no longer exists
	 *                                      in the database
	 * @throws PessimisticLockException	 if pessimistic locking fails
	 *                                      and the transaction is rolled back
	 * @throws LockTimeoutException		 if pessimistic locking fails and
	 *                                      only the statement is rolled back
	 * @throws PersistenceException		 if an unsupported lock call
	 *                                      is made
	 */
	public void refresh(Object entity, LockModeType lockMode,
						Map properties);

	/**
	 * Clear the persistence context, causing all managed
	 * entities to become detached. Changes made to entities that
	 * have not been flushed to the database will not be
	 * persisted.
	 */
	public void clear();

	/**
	 * Remove the given entity from the persistence context, causing
	 * a managed entity to become detached. Unflushed changes made
	 * to the entity if any (including removal of the entity),
	 * will not be synchronized to the database. Entities which
	 * previously referenced the detached entity will continue to
	 * reference it.
	 *
	 * @param entity
	 *
	 * @throws IllegalArgumentException if the instance is not an
	 *                                  entity
	 */
	public void detach(Object entity);

	/**
	 * Check if the instance is a managed entity instance belonging
	 * to the current persistence context.
	 *
	 * @param entity
	 *
	 * @return
	 *
	 * @throws IllegalArgumentException if not an entity
	 */
	public boolean contains(Object entity);

	/**
	 * Get the current lock mode for the entity instance.
	 *
	 * @param entity
	 *
	 * @return lock mode
	 *
	 * @throws TransactionRequiredException if there is no
	 *                                      transaction
	 * @throws IllegalArgumentException	 if the instance is not a
	 *                                      managed entity and a transaction is active
	 */
	public LockModeType getLockMode(Object entity);

	/**
	 * Set an entity manager property.
	 * If a vendor-specific property is not recognized, it is
	 * silently ignored.
	 *
	 * @param propertyName
	 * @param value
	 *
	 * @throws IllegalArgumentException if the second argument is not
	 *                                  valid for the implementation
	 */
	public void setProperty(String propertyName, Object value);

	/**
	 * Get the properties and associated values that are in effect
	 * for the entity manager. Changing the contents of the map does
	 * not change the configuration in effect.
	 */
	public Map getProperties();

	/**
	 * Get the names of the properties that are supported for use
	 * with the entity manager.
	 * These correspond to properties and hints that may be passed
	 * to the methods of the EntityManager interface that take a
	 * properties argument or used with the PersistenceContext
	 * annotation. These properties include all standard entity
	 * manager hints and properties as well as vendor-specific ones
	 * supported by the provider. These properties may or may not
	 * currently be in effect.
	 *
	 * @return property names
	 */
	public Set getSupportedProperties();

	/**
	 * Create an instance of Query for executing a
	 * Java Persistence query language statement.
	 *
	 * @param qlString a Java Persistence query string
	 *
	 * @return the new query instance
	 *
	 * @throws IllegalArgumentException if the query string is found
	 *                                  to be invalid
	 */
	public Query createQuery(String qlString);

	/**
	 * Create an instance of TypedQuery for executing a
	 * criteria query.
	 * @param criteriaQuery  a criteria query object
	 * @return the new query instance
	 * @throws IllegalArgumentException if the query definition is
	 *       found to be invalid
	 */
	public  TypedQuery createQuery(CriteriaQuery criteriaQuery);

	/**
	 * Create an instance of TypedQuery for executing a
	 * Java Persistence query language statement.
	 * The select list of the query must contain only a single
	 * item, which must be assignable to the type specified by
	 * the resultClass argument.
	 * @param qlString a Java Persistence query string
	 * @param resultClass the type of the query result
	 * @return the new query instance
	 * @throws IllegalArgumentException if the query string is found
	 *         to be invalid or if the query result is found to
	 *         not be assignable to the specified type.
	 */
	public  TypedQuery createQuery(String qlString, Class resultClass);

	/**
	 * Create an instance of Query for executing a
	 * named query (in the Java Persistence query language
	 * or in native SQL).
	 *
	 * @param name the name of a query defined in metadata
	 *
	 * @return the new query instance
	 *
	 * @throws IllegalArgumentException if a query has not been
	 *                                  defined with the given name or if the query string is
	 *                                  found to be invalid
	 */
	public Query createNamedQuery(String name);

	/**
	 * Create an instance of TypedQuery for executing a
	 * named query (in the Java Persistence query language
	 * or in native SQL).
	 * The select list of the query must contain only a single
	 * item, which must be assignable to the type specified by
	 * the resultClass argument.
	 * @param name the name of a query defined in metadata
	 * @param resultClass the type of the query result
	 * @return the new query instance
	 * @throws IllegalArgumentException if a query has not been
	 * 		defined with the given name or if the query string is
	 *		found to be invalid or if the query result is found to
	 *              not be assignable to the specified type.
	 */
	public  TypedQuery createNamedQuery(String name, Class resultClass);

	/**
	 * Create an instance of Query for executing
	 * a native SQL statement, e.g., for update or delete.
	 *
	 * @param sqlString a native SQL query string
	 *
	 * @return the new query instance
	 */
	public Query createNativeQuery(String sqlString);

	/**
	 * Create an instance of Query for executing
	 * a native SQL query.
	 *
	 * @param sqlString a native SQL query string
	 * @param resultClass the class of the resulting instance(s)
	 *
	 * @return the new query instance
	 */
	public Query createNativeQuery(String sqlString,
								   Class resultClass);

	/**
	 * Create an instance of Query for executing
	 * a native SQL query.
	 *
	 * @param sqlString a native SQL query string
	 * @param resultSetMapping the name of the result set mapping
	 *
	 * @return the new query instance
	 */
	public Query createNativeQuery(String sqlString,
								   String resultSetMapping);

	/**
	 * Indicate to the EntityManager that a JTA transaction is
	 * active. This method should be called on a JTA application
	 * managed EntityManager that was created outside the scope
	 * of the active transaction to associate it with the current
	 * JTA transaction.
	 *
	 * @throws TransactionRequiredException if there is
	 *                                      no transaction.
	 */
	public void joinTransaction();

	/**
	 * Return an object of the specified type to allow access to the
	 * provider-specific API. If the provider's EntityManager
	 * implementation does not support the specified class, the
	 * PersistenceException is thrown.
	 *
	 * @param cls the class of the object to be returned. This is
	 * normally either the underlying EntityManager implementation
	 * class or an interface that it implements.
	 *
	 * @return an instance of the specified class
	 *
	 * @throws PersistenceException if the provider does not
	 *                              support the call.
	 */
	public  T unwrap(Class cls);

	/**
	 * Return the underlying provider object for the EntityManager,
	 * if available. The result of this method is implementation
	 * specific. The unwrap method is to be preferred for new
	 * applications.
	 */
	public Object getDelegate();

	/**
	 * Return the underlying provider object for the EntityManager,
	 * if available. The result of this method is implementation
	 * specific. The unwrap method is to be preferred for new
	 * applications.
	 * /
	 * public Object getDelegate();
	 * /**
	 * Close an application-managed EntityManager.
	 * After the close method has been invoked, all methods
	 * on the EntityManager instance and any Query objects obtained
	 * from it will throw the IllegalStateException except
	 * for getProperties, getSupportedProperties, getTransaction,
	 * and isOpen (which will return false).
	 * If this method is called when the EntityManager is
	 * associated with an active transaction, the persistence
	 * context remains managed until the transaction completes.
	 *
	 * @throws IllegalStateException if the EntityManager
	 *                               is container-managed.
	 */
	public void close();

	/**
	 * Determine whether the EntityManager is open.
	 *
	 * @return true until the EntityManager has been closed.
	 */
	public boolean isOpen();

	/**
	 * Return the resource-level transaction object.
	 * The EntityTransaction instance may be used serially to
	 * begin and commit multiple transactions.
	 *
	 * @return EntityTransaction instance
	 *
	 * @throws IllegalStateException if invoked on a JTA
	 *                               EntityManager.
	 */
	public EntityTransaction getTransaction();

	/**
	 * Return the entity manager factory for the entity manager.
	 *
	 * @return EntityManagerFactory instance
	 *
	 * @throws IllegalStateException if the entity manager has
	 *                               been closed.
	 */
	public EntityManagerFactory getEntityManagerFactory();

	/**
	 * Return an instance of QueryBuilder for the creation of
	 * Criteria API Query objects.
	 *
	 * @return QueryBuilder instance
	 *
	 * @throws IllegalStateException if the entity manager has
	 *                               been closed.
	 */
	public QueryBuilder getQueryBuilder();

	/**
	 * Return an instance of Metamodel interface for access to the
	 * metamodel of the persistence unit.
	 *
	 * @return Metamodel instance
	 *
	 * @throws IllegalStateException if the entity manager has
	 *                               been closed.
	 */
	public Metamodel getMetamodel();
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy