package com.idega.core.persistence; import java.util.List; import javax.persistence.Entity; import javax.persistence.Query; /** * @author <a href="mailto:civilis@idega.com">Vytautas Čivilis</a> * @version $Revision: 1.14 $ Last modified: $Date: 2009/04/16 13:23:09 $ by $Author: civilis $ */ public interface GenericDao { public abstract void persist(Object product); public abstract <T> T merge(T product); public abstract <T> T getReference(Class<T> clazz, Object primaryKey); public abstract <T> T find(Class<T> clazz, Object primaryKey); public abstract Query createNamedQuery(String queryName); public abstract void remove(Object obj); public abstract boolean contains(Object obj); /** * first merges and then removed detached entity. This can be used in non transactional method * * @param obj */ public abstract void mergeRemove(Object obj); public abstract void flush(); public abstract void refresh(Object product); public abstract <Expected> List<Expected> getResultList( String namedQueryName, Class<Expected> expectedReturnType, Param... params); public abstract <Expected> Expected getSingleResult(String namedQueryName, Class<Expected> expectedReturnType, Param... params); public abstract <Expected> Expected getSingleResultByInlineQuery( String query, Class<Expected> expectedReturnType, Param... params); /** * <p>Queries database for results.</p> * @param query HQL query. * @param expectedReturnType any type you expect to get, for example: * {@link Long} should be fine for numbers, {@link String} for strings, * fits any Hibernate/JPA {@link Entity}. Usually marked as @Entity. * @param params to fill HQL query with and transform it to SQL query. * @return {@link List} of ? extends {@link Entity} (Is JPA or * Hibernate entity). */ public abstract <Expected> List<Expected> getResultListByInlineQuery( String query, Class<Expected> expectedReturnType, Param... params); /** * @param query * @return native inline query by query provided */ public abstract com.idega.core.persistence.Query getQueryNativeInline( String query); /** * @param query Hibernate HQL type query. * @return com.idega.core.persistence.Query query by query provided */ public abstract com.idega.core.persistence.Query getQueryInline(String query); /** * @param queryName * @return hql or native query by query name provided. Query can be defined e.g. using * @javax.persistence.NamedQuery */ public abstract com.idega.core.persistence.Query getQueryNamed( String queryName); }