package br.com.itexto.springforum.dao.hibernate;
import java.util.List;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import br.com.itexto.springforum.dao.DAOBase;
@Transactional(propagation=Propagation.SUPPORTS)
public abstract class HBDAO<T> implements DAOBase<T> {
@Autowired
private SessionFactory sessionFactory;
public SessionFactory getSessionFactory() {
return sessionFactory;
}
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
protected Session getSession(){
return getSessionFactory().getCurrentSession();
}
public List<T> list(int offset, int max) {
return (List<T>) getSession().createCriteria(getClazz()).setMaxResults(max).
setFirstResult(offset).list();
}
public void persist(T objeto) {
getSession().saveOrUpdate(objeto);
}
public void excluir(T objeto) {
getSession().delete(objeto);
}
public T get(Long id) {
return (T) getSession().get( getClazz(), id);
}
protected abstract Class getClazz() ;
}