/** * */ package com.gffny.ldrbrd.common.dao; import java.util.List; import java.util.Map; import javax.persistence.EntityManager; import com.gffny.ldrbrd.common.exception.DataAccessException; import com.gffny.ldrbrd.common.model.CommonEntity; /** * @author jdgaffney * */ public interface GenericDao<T> { /** * * @param entity * @return * @throws DataAccessException */ @SuppressWarnings("hiding") public <T> T persist(T entity) throws DataAccessException; /** * * @param entity * @return * @throws DataAccessException */ @SuppressWarnings("hiding") public <T> T merge(T entity) throws DataAccessException; /** * * @param clazz * @param id * @return * @throws DataAccessException */ @SuppressWarnings("hiding") public <T> T findById(Class<T> clazz, String id) throws DataAccessException; /** * Find by using a named query. * * @param name * named query name * @param parameters * map of query key-value pairs parameters. Pass empty map if no * params * @return */ List<T> findByNamedQuery(String name, Map<String, ?> parameters) throws DataAccessException; /** * * Find by named query, limit the result * * @param name * @param parameters * @param maxResults * @return */ List<T> findByNamedQuery(String name, Map<String, ?> parameters, int maxResults) throws DataAccessException; /** * 1 Find by using a query * * @param query * query string * @param parameters * map of query key-value pairs parameters. Pass empty map if no * params * @return */ List<T> findByQuery(String query, Map<String, ?> parameters) throws DataAccessException; /** * Returns a single result. Caller would cast returned value as needed. For * count use long, for avg double, etc... * * @param namedQuery * @param parameters * @return single result */ Object findByAggregateNamedQuerySingleResult(String namedQuery, Map<String, ?> parameters) throws DataAccessException; /** * Finds all of the rows associated with the class * * @param clazz * @return */ List<T> findAll(Class<? extends CommonEntity> clazz) throws DataAccessException; /** * Update by using Named query * * @param query * @param parameters * @return returns update count - total number of rows updated */ int updateByNamedQuery(String query, Map<String, ?> parameters) throws DataAccessException; /** * Update using query and parameters * * @param query * @param parameters * @return returns update count */ int updateByQuery(String query, Map<String, ?> parameters) throws DataAccessException; /** * * @return */ public EntityManager getEntityManager(); }