package rocks.inspectit.server.dao.impl; import java.util.List; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import rocks.inspectit.server.util.JpaUtil; /** * Abstract JPA DAO class that can execute simple operations on an entity class. * * @author Ivan Senic * * @param <T> * Type of entities to load. */ public abstract class AbstractJpaDao<T> { /** * Type of entity to load with this DAO. */ private Class<T> entityType; /** * Entity manager. */ @PersistenceContext EntityManager entityManager; /** * @param entityType * Type of entity to load with this DAO. */ public AbstractJpaDao(Class<T> entityType) { this.entityType = entityType; } /** * Find entity by id. * * @param id * Not <code>null</code> id value * * @return Loaded entity or <code>null</code> */ public T load(Long id) { return entityManager.find(entityType, id); } /** * Creates new entity. * * @param object * Object to persist. */ public void create(T object) { getEntityManager().persist(object); } /** * Updates an entity object. * * @param object * Object to update. * @return Updated object. */ public T update(T object) { return getEntityManager().merge(object); } /** * Deletes an object by executing {@link #entityManager} remove method. * * @param object * Object to delete. */ public void delete(T object) { JpaUtil.delete(entityManager, object); } /** * Deletes collection of objects. * * @param objects * Objects to remove. */ public void deleteAll(List<T> objects) { for (T object : objects) { delete(object); } } /** * Gets {@link #entityManager}. * * @return {@link #entityManager} */ protected EntityManager getEntityManager() { return entityManager; } }