package com.rzg.zombieland.server.persistencia;
import java.io.Serializable;
import java.util.List;
import org.hibernate.Session;
/**
* Administra la persistencia de un objeto.
* @author nicolas
* @param <T> El tipo de objeto que se persiste.
* @param <T_ID> El tipo del ID del objeto que se persiste.
*
*/
public abstract class Dao<T, T_ID extends Serializable> {
// La sesi�n de Hibernate actual.
private Session session;
// La clase a la que hace referencia el DAO.
private Class<T> klass;
/**
* Las clases que heredan deben implementar este constructor con la clase particular que
* persisten.
* @param klass
*/
protected Dao(Class<T> klass) {
if (klass == null)
throw new NullPointerException();
this.klass = klass;
}
/**
* Devuelve una sesi�n de Hibernate, abri�ndola si es necesario.
* @return la sesi�n de hibernate.
*/
protected Session getSession() {
if (session == null) {
session = HibernateSingleton.getInstancia().openSession();
session.beginTransaction();
}
return session;
}
/**
* @param id
* @return un objeto seg�n su ID.
*/
public T getObjeto(T_ID id) {
return getSession().get(klass, id);
}
/**
* Guarda un objeto en la DB.
* @param objeto
*/
public void guardarObjeto(T objeto) {
getSession().save(objeto);
}
/**
* Actualiza un objeto en la DB.
* @param objeto
*/
public void actualizarObjeto(T objeto) {
getSession().update(objeto);
}
/**
* Finaliza la transacci�n y cierra la sesi�n de Hibernate.
*/
public void cerrarSesion() {
getSession().getTransaction().commit();
getSession().close();
session = null;
}
/**
* @return un listado de objetos sin filtrar.
*/
@SuppressWarnings("unchecked")
public List<T> getListado() {
return getSession().createCriteria(klass).list();
}
}