Olá pessoal, bom dia!
Eu tenho a seguinte classe abaixo:
package dao;
import model.DAO;
import org.hibernate.Session;
import org.hibernate.Transaction;
import usuario.Usuario;
import util.HibernateUtil;
public class DaoFactory {
private final Session session;
private Transaction transaction;
public DaoFactory() {
session = HibernateUtil.getSession();
// this.session = session;
}
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<Usuario> getUsuarioDAO() {
return new DAO<Usuario>(this.session, Usuario.class);
}
}
Logo a seguir, tenho outra classe DAO Generic:
package model;
import java.util.List;
import org.hibernate.Session;
public class DAO<T> {
private final Session session;
@SuppressWarnings("unchecked")
private final Class classe;
@SuppressWarnings("unchecked")
public DAO(Session session, Class classe) {
this.session = session;
this.classe = classe;
}
public void adicionar(T usuario) {
this.session.save(usuario);
}
public void remover(String cpf) {
this.session.delete(cpf);
}
public void atualizar(T usuario) {
this.session.merge(usuario);
}
@SuppressWarnings("unchecked")
public T procurar(Long id) {
return (T) session.load(this.classe, id);
}
@SuppressWarnings("unchecked")
public List<T> listarTodos() {
return this.session.createCriteria(this.classe).list();
}
}
Por fim, tenho uma classe qualquer, onde estou testando inserir, alterar, excluir, etc.:
package main;
import model.DAO;
import usuario.Usuario;
import dao.DaoFactory;
public class TestaUsuario {
public static void main(String[] args) {
/**
* Cria um Usuaário
*/
Usuario usuario = new Usuario();
usuario.setNome("Apolo");
usuario.setLogin("Justino");
usuario.setSenha("1111112");
/**
* Cria DAO
*/
DAO<Usuario> usuarioDAO = new DaoFactory().getUsuarioDAO();
usuarioDAO.adicionar(usuario);
// DAO<Usuario> usuarioDAO = new DAO<Usuario>(Usuario.class);
// DaoFactory daoFactory = new DaoFactory();
//
// daoFactory.beginTransaction();
// usuarioDAO.adiciona(usuario);
// daoFactory.commit();
// daoFactory.close();
/**
* Abre transação e insere
*/
// Transaction t = session.beginTransaction();
// usuarioDAO.adiciona(usuario);
// t.commit();
/**
* Lista todos os usuarios
*/
// usuarioDAO.listaTodos();
// List<Usuario> lista = usuarioDAO.listaTodos();
// for (Usuario u : lista) {
// System.out.println("Usuario: " + u.getLogin());
// }
// usuarioDAO.listaTodos();
}
}
Reparem que na classe TestaUsuario não estou usando nada de HIBERNATE ou SESSION.
Gostaria de poder utiliza-la sem a depedência do hibernate ou session.
O problema é que na classe DaoFactory eu retorno uma session de hibernateUtil, pois se fosse para passar uma
session como parâmetro, deixaria minha clase TestaUsuario dependente de Session.
Outra coisa; A classe DAO está passando uma Session como parâmetro.
O que acontece é que as classes estão trabalhando com sessions diferentes…
Alguem tem alguma sugestão para resolver essa “dependência” entre os Dao’s [color=red]usando a mesma session[/color]?
Desde já, agradeço!
Abc