fala galera blz... to precisando de uma ajudinha aqui.. fiz uma aplicação usando hibernate só q estou encontrando um poco de dificuldade. Procurei em alguns topicos mas nenhum me ajudo..
estou encontrando o seguinte erro:
Exception in thread "AWT-EventQueue-0" org.hibernate.HibernateException: org.hibernate.HibernateException: illegally attempted to associate a proxy with two open Sessions
eu sei q esse erro acontece pq um mesmo objeto não pode ser de 2 session diferente, só q meu problema é q não consigo fechar a session quando faço presquisa no banco de dados. se eu fecho ela dentro do metodo de retrono me da um erro q a session foi fechada e não pode retornar.
no metodo de cadastrar funciona corretamente.. o problema é no metodo de alterar. queria saber c esse erro ocorre pq eu não fechei as session?? ou tem alguma outra forma de resolver o erro???
vou posta minha classe DAO e HibernateUtility
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
/**
*
* @author Administrador
*/
public class FornecedorDAO extends DAO {
private SessionFactory factory;
/** Creates a new instance of FornecedorDAO */
public FornecedorDAO() {
factory = new Configuration().configure("/Configuracao/hibernate.cfg.xml").buildSessionFactory();
}
@Override
public void create(Object obj) throws IOException {
if (obj instanceof negocio.Fornecedor) {
negocio.Fornecedor fornecedor = (negocio.Fornecedor) obj;
Session sessao = HibernateUtility.getSession();
Transaction transaction = null;
try {
transaction = sessao.beginTransaction();
sessao.save(fornecedor);
transaction.commit();
sessao.close();
} catch (HibernateException hx) {
hx.printStackTrace();
transaction.rollback();
throw new HibernateException("" + hx);
}
}
}
@Override
public List retrieve(Object key) throws IOException {
List fornecedores = new ArrayList();
if (key instanceof negocio.Fornecedor) {
negocio.Fornecedor fornecedor = (negocio.Fornecedor) key;
Session sessao = HibernateUtility.getSession();
try {
if (fornecedor.getCodigo() != null) {
fornecedor = (negocio.Fornecedor) sessao.load(negocio.Fornecedor.class, new Long(fornecedor.getCodigo()));
fornecedores.add(fornecedor);
} else {
if (fornecedor.getNome() != null) {
Query select = sessao.getNamedQuery("buscarNome");
select.setString("nome", fornecedor.getNome());
fornecedores = select.list();
} else {
Query select = sessao.getNamedQuery("buscarTodos");
fornecedores = select.list();
}
}
} catch (HibernateException hx) {
hx.printStackTrace();
throw new HibernateException("" + hx);
} finally {
// sessao.close();
}
}
return fornecedores;
}
@Override
public void update(Object obj) throws IOException {
if (obj instanceof negocio.Fornecedor) {
negocio.Fornecedor fornecedor = (negocio.Fornecedor) obj;
Session sessao = HibernateUtility.getSession();
Transaction transaction = null;
try {
transaction = sessao.beginTransaction();
sessao.update(fornecedor);
transaction.commit();
sessao.close();
} catch (HibernateException hx) {
hx.printStackTrace();
transaction.rollback();
throw new HibernateException("" + hx);
}
}
}
@Override
public void delete(Object obj) throws IOException {
if (obj instanceof negocio.Fornecedor) {
negocio.Fornecedor fornecedor = (negocio.Fornecedor) obj;
Session sessao = HibernateUtility.getSession();
Transaction transaction = null;
try {
transaction = sessao.beginTransaction();
sessao.delete(fornecedor);
transaction.commit();
sessao.close();
} catch (HibernateException hx) {
hx.printStackTrace();
transaction.rollback();
throw new HibernateException("" + hx);
}
}
}
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class HibernateUtility {
private static SessionFactory factory;
static {
try {
factory = new Configuration().configure("/Configuracao/hibernate.cfg.xml").buildSessionFactory();
} catch (Exception e) {
e.printStackTrace();
factory = null;
}
}
public static Session getSession() {
return factory.openSession();
}
}