package com.tap5.hotelbooking.dal;
import java.io.Serializable;
import java.util.List;
import java.util.Map;
import org.apache.tapestry5.hibernate.annotations.CommitAfter;
/**
* CrudServiceDAO interface.
*
* @author karesti
*/
public interface CrudServiceDAO
{
/**
* Creates a new object for the given type. After a call to this method the entity will be
* persisted into database and then refreshed. Also current persistent Session will be flushed.
*
* @param <T>
* @param t
* @return persisted Object
*/
@CommitAfter
<T> T create(T t);
/**
* Updates the given object
*
* @param <T>
* @param t
* @return persisted object
*/
@CommitAfter
<T> T update(T t);
/**
* Deletes the given object by id
*
* @param <T>
* @param <PK>
* @param type
* , entity class type
* @param id
*/
@CommitAfter
<T, PK extends Serializable> void delete(Class<T> type, PK id);
/**
* Finds an object by id
*
* @param <T>
* @param <PK>
* @param type
* @param id
* @return the object
*/
<T, PK extends Serializable> T find(Class<T> type, PK id);
/**
* Finds a list of objects for the given query name
*
* @param <T>
* @param queryName
* @return returns a list of objects
*/
<T> List<T> findWithNamedQuery(String queryName);
/**
* Find a query with parameters
*
* @param <T>
* @param queryName
* @param params
* @return resulting list
*/
<T> List<T> findWithNamedQuery(String queryName, Map<String, Object> params);
/**
* Returns one result, query without parameters
*
* @param <T>
* @param queryName
* @return T object
*/
<T> T findUniqueWithNamedQuery(String queryName);
/**
* Returns just one result with a named query and parameters
*
* @param <T>
* @param queryName
* @param params
* @return T object
*/
<T> T findUniqueWithNamedQuery(String queryName, Map<String, Object> params);
}