O Hibernates só está recuperando o Objecto quando ele quer :-O!

3 respostas
tiagomac

Olá Pessoal,

Então, estou com um probleminha irritante com o Hibernates que recupera um objeto só quando quer… o problema está em uma página que faz o carregamento do objeto “LoginGestao” do banco de dados configura algumas coisas na página, o problema ocorre as vezes no momento de carregamento nessa linha:

l = (LoginGestor) banco.buscar(LoginGestor.class, l.getUser());

O l.getUser() vem de:

LoginGestor l = (LoginGestor) session.getAttribute("login");

sendo que também coloquei um out.println antes da tentativa de busca no banco para verificar se login que vem da sessão tem valor, e em todas situações ele tem o Objecto com o valor correto, portanto não entendo como uma hora ele consegue pegar o objeto e trazer do banco e a página funciona e em outras horas ele não consegue :(!!!

Os códigos de chamada estão assim:

ConexaoHibernate.java

public void salvar(Object o) {
		session = HibernateUtility.reload();
		session.beginTransaction();
		session.saveOrUpdate(o);
		session.getTransaction().commit();
	}
public Object buscar(Class c, Serializable cod) {
		return this.session.get(c, cod);
	}

	public Object buscar(Object o) {
		Iterator it = this.getLista(o.getClass()).iterator();
		while (it.hasNext()) {
			Object o1 = it.next();
			if (o.equals(o1)) {
				return o1;
			}
		}
		return null;
	}

HibernateUtility.java (Singleton)

private static SessionFactory getFactory() {
		if (factory == null) {
			// factory = new Configuration().configure().buildSessionFactory();
			factory = new AnnotationConfiguration().configure()
					.buildSessionFactory();
		}
		return factory;
	}

	public static Session getSession() {
		if (session == null) {
			session = getFactory().openSession();
		}
		session.clear();
		return session;
	}

	public static Session reload() {
		session.clear();
		return session;
	}

Abraços.

3 Respostas

paulofafism

Na minha aplicação eu faço da seguinte forma pois tive os mesmos problemas que vc esta tendo

Quando vou consultar inicio um nova transação tb e no final quando consulto dou um commit. Já li que não e necessario iniciar um transação para consultas. Usei transação pq não estava conseguindo recuperar os objetos.

renatocustodio

Tenta por um session.flush() depois de dar o get…

peerless

In OFF: Quando li a descrição do tópico achei que o cara era português. hehe!

Criado 4 de junho de 2008
Ultima resposta 4 de jun. de 2008
Respostas 3
Participantes 4