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

javax.persistence.EntityManager Maven / Gradle / Ivy

Go to download

The Java Persistence API (JPA) : a standard interface-based Java model abstraction of persistence, developed by the JCP.

There is a newer version: 2.2.4
Show newest version
/*
 * Copyright (c) 2008, 2009, 2011 Oracle, Inc. All rights reserved.
 *
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0
 * which accompanies this distribution.  The Eclipse Public License is available
 * at http://www.eclipse.org/legal/epl-v10.html and the Eclipse Distribution License
 * is available at http://www.eclipse.org/org/documents/edl-v10.php.
 */
package javax.persistence;

import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaDelete;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.CriteriaUpdate;
import javax.persistence.metamodel.Metamodel;
import java.util.List;
import java.util.Map;

/**
 * Interface used to interact with the persistence context.
 * 

* An EntityManager instance is associated with a persistence context. A persistence context is a * set of entity instances in which for any persistent entity identity there is a unique entity instance. * Within the persistence context, the entity instances and their lifecycle are managed. The * EntityManager API is used to create and remove persistent entity instances, to find entities * by their primary key, and to query over entities. *

* The set of entities that can be managed by a given EntityManager instance is defined by a * persistence unit. A persistence unit defines the set of all classes that are related or grouped by the * application, and which must be colocated in their mapping to a single database. * @see Query * @see TypedQuery * @see CriteriaQuery * @see PersistenceContext * @since Java Persistence 1.0 */ public interface EntityManager { /** * Make an instance managed and persistent. * @param entity entity instance * @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 entity instance * @return the managed instance that the state was merged to * @param Type * @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 entity instance * @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 entity class * @param primaryKey primary key * @return the found entity instance or null if the entity does not exist * @param Type * @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 entity class * @param primaryKey primary key * @param properties standard and vendor-specific properties and hints * @return the found entity instance or null if the entity does not exist * @param Type * @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 * @since Java Persistence 2.0 */ 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 entity class * @param primaryKey primary key * @param lockMode lock mode * @return the found entity instance or null if the entity does not exist * @param Type * @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 * specified * @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 * @since Java Persistence 2.0 */ 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 entity class * @param primaryKey primary key * @param lockMode lock mode * @param properties standard and vendor-specific properties and hints * @return the found entity instance or null if the entity does not exist * @param Type * @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 specified * @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 * @since Java Persistence 2.0 */ 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 entity class * @param primaryKey primary key * @return the found entity instance * @param Type * @throws IllegalArgumentException if the first argument does not denote an entity type or the second * argument is not a valid type for that entitys 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 flush mode */ 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 entity instance * @param lockMode lock mode * @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 entity instance * @param lockMode lock mode * @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 * @since Java Persistence 2.0 */ 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 entity instance * @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 entity instance * @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 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 * @since Java Persistence 2.0 */ 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 entity instance * @param lockMode lock mode * @throws IllegalArgumentException if the instance is not an entity or the entity is not managed * @throws TransactionRequiredException if there is no transaction and if invoked on a container-managed * EntityManager instance with PersistenceContextType.TRANSACTION or with a lock * mode other than NONE * @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 * @since Java Persistence 2.0 */ 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 entity instance * @param lockMode lock mode * @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 and if invoked on a container-managed * EntityManager instance with PersistenceContextType.TRANSACTION or with a lock * mode other than NONE * @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 * @since Java Persistence 2.0 */ 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 entity instance * @throws IllegalArgumentException if the instance is not an entity * @since Java Persistence 2.0 */ public void detach(Object entity); /** * Check if the instance is a managed entity instance belonging to the current persistence context. * @param entity entity instance * @return boolean indicating if entity is in persistence context * @throws IllegalArgumentException if not an entity */ public boolean contains(Object entity); /** * Get the current lock mode for the entity instance. * @param entity entity instance * @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 * @since Java Persistence 2.0 */ public LockModeType getLockMode(Object entity); /** * Set an entity manager property or hint. If a vendor-specific property or hint is not recognized, it is * silently ignored. * @param propertyName name of property or hint * @param value value for property or hint * @throws IllegalArgumentException if the second argument is not valid for the implementation * @since Java Persistence 2.0 */ public void setProperty(String propertyName, Object value); /** * Get the properties and hints and associated values that are in effect for the entity manager. Changing * the contents of the map does not change the configuration in effect. * @return map of properties and hints in effect for entity manager * @since Java Persistence 2.0 */ public Map getProperties(); /** * 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 * @param Type * @throws IllegalArgumentException if the criteria query is found to be invalid * @since Java Persistence 2.0 */ public TypedQuery createQuery(CriteriaQuery criteriaQuery); /** * Create an instance of Query for executing a criteria update query. * @param updateQuery a criteria update query object * @return the new query instance * @throws IllegalArgumentException if the update query is found to be invalid */ public Query createQuery(CriteriaUpdate updateQuery); /** * Create an instance of Query for executing a criteria delete query. * @param deleteQuery a criteria delete query object * @return the new query instance * @throws IllegalArgumentException if the delete query isfound to be invalid */ public Query createQuery(CriteriaDelete deleteQuery); /** * 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 * @param Type * @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 * @since Java Persistence 2.0 */ 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 Java Persistence query language named * query. 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 * @param Type * @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 * @since Java Persistence 2.0 */ 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); /** * Create an instance of StoredProcedureQuery for executing a stored procedure in the database. * @param name name assigned to the stored procedure query in metadata * @return the new stored procedure query instance * @throws IllegalArgumentException if a query has not been defined with the given name */ public StoredProcedureQuery createNamedStoredProcedureQuery(String name); /** * Create an instance of StoredProcedureQuery for executing a stored procedure in the database. Parameters * must be registered before the stored procedure can be executed. If the stored procedure returns one or * more result sets, any result set will be returned as a list of type Object[]. * @param procedureName name of the stored procedure in the database * @return the new stored procedure query instance * @throws IllegalArgumentException if a stored procedure of the given name does not exist (or the query * execution will fail) */ public StoredProcedureQuery createStoredProcedureQuery(String procedureName); /** * Create an instance of StoredProcedureQuery for executing a stored procedure in the database. Parameters * must be registered before the stored procedure can be executed. The resultClass arguments must be * specified in the order in which the result sets will be returned by the stored procedure invocation. * @param procedureName name of the stored procedure in the database * @param resultClasses classes to which the result sets produced by the stored procedure are to be mapped * @return the new stored procedure query instance * @throws IllegalArgumentException if a stored procedure of the given name does not exist (or the query * execution will fail) */ public StoredProcedureQuery createStoredProcedureQuery(String procedureName, Class... resultClasses); /** * Create an instance of StoredProcedureQuery for executing a stored procedure in the database. Parameters * must be registered before the stored procedure can be executed. The resultSetMapping arguments must be * specified in the order in which the result sets will be returned by the stored procedure invocation. * @param procedureName name of the stored procedure in the database * @param resultSetMappings the names of the result set mappings to be used in mapping result sets * returned by the stored procedure * @return the new stored procedure query instance * @throws IllegalArgumentException if a stored procedure or result set mapping of the given name does not * exist (or the query execution will fail) */ public StoredProcedureQuery createStoredProcedureQuery(String procedureName, String... resultSetMappings); /** * Indicate to the entity manager that a JTA transaction is active. This method should be called on a JTA * application managed entity manager 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(); /** * Determine whether the entity manager is joined to the current transaction. Returns false if the entity * manager is not joined to the current transaction or if no transaction is active * @return boolean */ public boolean isJoinedToTransaction(); /** * 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 * @param Type * @throws PersistenceException if the provider does not support the call * @since Java Persistence 2.0 */ 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. * @return underlying provider object for EntityManager */ public Object getDelegate(); /** * Close an application-managed entity manager. After the close method has been invoked, all methods on * the EntityManager instance and any Query and TypedQuery objects * obtained from it will throw the IllegalStateException except for * getProperties, getTransaction, and isOpen (which will return * false). If this method is called when the entity manager is associated with an active transaction, the * persistence context remains managed until the transaction completes. * @throws IllegalStateException if the entity manager is container-managed */ public void close(); /** * Determine whether the entity manager is open. * @return true until the entity manager has been closed */ public boolean isOpen(); /** * Return the resource-level EntityTransaction object. The EntityTransaction * instance may be used serially to begin and commit multiple transactions. * @return EntityTransaction instance * @throws IllegalStateException if invoked on a JTA entity manager */ public EntityTransaction getTransaction(); /** * Return the entity manager factory for the entity manager. * @return EntityManagerFactory instance * @throws IllegalStateException if the entity manager has been closed * @since Java Persistence 2.0 */ public EntityManagerFactory getEntityManagerFactory(); /** * Return an instance of CriteriaBuilder for the creation of CriteriaQuery * objects. * @return CriteriaBuilder instance * @throws IllegalStateException if the entity manager has been closed * @since Java Persistence 2.0 */ public CriteriaBuilder getCriteriaBuilder(); /** * 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 * @since Java Persistence 2.0 */ public Metamodel getMetamodel(); /** * Return a mutable EntityGraph that can be used to dynamically create an EntityGraph. * @param rootType class of entity graph * @return entity graph * @param Type * @since JPA 2.1 */ public EntityGraph createEntityGraph(Class rootType); /** * Return a mutable copy of the named EntityGraph. If there is no entity graph with the specified name, * null is returned. * @param graphName name of an entity graph * @return entity graph * @since JPA 2.1 */ public EntityGraph createEntityGraph(String graphName); /** * Return a named EntityGraph. The returned EntityGraph should be considered immutable. * @param graphName name of an existing entity graph * @return named entity graph * @throws IllegalArgumentException if there is no EntityGraph of the given name * @since JPA 2.1 */ public EntityGraph getEntityGraph(String graphName); /** * Return all named EntityGraphs that have been defined for the provided class type. * @param entityClass entity class * @return list of all entity graphs defined for the entity * @param Type * @throws IllegalArgumentException if the class is not an entity * @since JPA 2.1 */ public List> getEntityGraphs(Class entityClass); }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy