ok....
Primeiro criei uma class Dao:
package br.com.cienci.nfe.dao;
import java.util.List;
import org.hibernate.Session;
public class Dao<T> {
private Session session;
private final Class classe;
public Dao(Session session, Class classe){
this.session = session;
this.classe = classe;
}
public void adiciona(T u){
this.session.save(u);
}
public void remove(T u){
this.session.delete(u);
}
public void atualiza(T u){
this.session.merge(u);
}
public List<T> listaTudo(){
return this.session.createCriteria(this.classe).list();
}
public T procura(Long id){
return (T) session.load(this.classe, id);
}
protected Session getSession(){
return session;
}
}
Depois uma HibernateUtil:
package br.com.cienci.nfe.dao;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.cfg.Configuration;
public class HibernateUtil {
private static SessionFactory factory;
static {
Configuration conf = new AnnotationConfiguration();
conf.configure();
factory = conf.buildSessionFactory();
}
public static Session getSession() {
return factory.openSession();
}
}
Depois uma DaoFactory:
package br.com.cienci.nfe.dao;
import br.com.cienci.nfe.modelo.Login;
import br.com.cienci.nfe.modelo.Role;
import org.hibernate.Session;
import org.hibernate.Transaction;
public class DaoFactory {
private Session session;
private Transaction transaction;
public DaoFactory() {
this.session = HibernateUtil.getSession();
}
public void beginTransaction() {
this.transaction = this.session.beginTransaction();
}
public void commit() {
this.transaction.commit();
this.transaction = null;
}
public boolean hasTransaction() {
return this.transaction != null;
}
public void rollback() {
this.transaction.rollback();
this.transaction = null;
}
public void close() {
this.session.close();
}
public Dao<Login> getLoginDao(){
return new Dao<Login>(this.session, Login.class);
}
public Dao<Role> getRoleDao(){
return new Dao<Role>(this.session, Role.class);
}
protected Session getSession() {
return session;
}
}
Depois no meu backing bean utilizo eles assim:
public class UsuarioBean {
private DaoFactory daoFactory;
public UsuarioBean() {
this.daoFactory = new DaoFactory();
}
public String removerUsuario() {
try {
this.daoFactory.beginTransaction();
this.daoFactory.getLoginDao().remove(this.getLoginFromList());
this.daoFactory.commit();
} catch (HibernateException ex) {
this.daoFactory.rollback();
System.err.println(ex.getMessage());
}
return "sucesso";
}
}
Gostaria de saber se esta faltando alguma coisa, para ficar um modelo legal...se eu preciso de algo para deixar uma transação aberta..se falta alguma interface.....
pq eu vim do VRaptor com framework, e nele eu usava uma DaoInterceptor para iniciar e finalizar as transações...mas usando JSF eu não uso nda do tipo...
Será q alguem pode me dar uma força...
vlw