Problema de cache com hibernate

11 respostas
A

Olá galera,
Estou fazendo minha primeira aplicação realmente expressiva com hibernate e jsp.

Estou desenvolvendo um sistema de sac onde um cliente da empresa entra no sistema e abre um chamado.
Bom, meu problema começa aí.
Tenho uma listagem dos chamados que foram abertos, porém nesta listagem as vezes não aperece o ultimo chamado cadastrado.
Daí eu dou um refresh na pagina e aparece, mas se eu atualizar a pagina outra vez ele some.

Como posso resolver isso?

Outra duvida por inexperiência:
Porque quando deleto um registro diretamente no banco ele ainda permace na minha aplicação?
Sei q o hibernate usa POJO.
Alguem poderia me dar uma explicação sobre isto?

11 Respostas

A

Esqueci um detalhe: estou utilizando hibernate3 com hbm, Mysql 6, tomcat 6, j2ee 1.5

P

Cara,

Sem olhar o código, fica meio difícil te ajudar…posta o código aí…

Focao

seu applicationContext.xml tem ?

<prop key="hibernate.cache.provider_class">org.hibernate.cache.HashtableCacheProvider</prop>
A

O método que monta a lista

public List<Chamado> findAll(){

Session sessao = sessionFactory.getCurrentSession();

sessao.beginTransaction();

Query query = sessao.createQuery(from Chamado order by dtInclusao desc);

List<Chamado> list = query.list();

sessao.flush();

return list;

}

A conexão:

public class HibernateUtil {

private static final SessionFactory sessionFactory;

static

{

try

{

sessionFactory = new Configuration().configure().buildSessionFactory();

}

catch (Throwable ex)

{

System.err.println(Falha na criação da SessionFactory. + ex);

throw new ExceptionInInitializerError(ex);

}

}

public static SessionFactory getSessionFactory()

{

return sessionFactory;

}

}

Focão esse applicationContext seria oq?
n tenho esse arquivo na minha aplicação.

Focao

Putz…vc naum usa spring pra injetar né…

seria o arquivo que faria algo como

sessionFactory.getCurrentSession().setCacheMode(CacheMode.IGNORE);

A

Cara, ainda n deu certo.

Tem q ser no método q faz a listagem ou no método que insere no banco?

Continua ocorrendo a mesmo coisa.

Insiro o registro e tenho q atualizar a página umas três vezes para aparecer na listagem.

Focao

Brow… to achando q seu problema é na página…

tenta colocar… no jsp

&lt;META HTTP-EQUIV="CACHE-CONTROL" CONTENT="NO-CACHE"&gt;
	&lt;META HTTP-EQUIV="PRAGMA" CONTENT="NO-CACHE"&gt;
	&lt;META HTTP-EQUIV="Expires" CONTENT="-1"&gt;
A

cara n resolveu.
eu já tinha colocado esses metas.

Eu tenho quase certeza que é problema com hibernate.

Acho q ele está carregando os dados do banco somente uma vez quando inicio a aplicação.

Focao
sessionFactory .setCacheMode(CacheMode.IGNORE);

Setou o setCacheMode ?

public class HibernateUtil {
	private static final SessionFactory sessionFactory;
	static
	{
		try
		{
			sessionFactory = new Configuration().configure().buildSessionFactory();
                                                sessionFactory .setCacheMode(CacheMode.IGNORE); //seta aki

		}
		catch (Throwable ex)
		{
			System.err.println("Falha na criação da SessionFactory." + ex);
			throw new ExceptionInInitializerError(ex);
		}
	}
	public static SessionFactory getSessionFactory()
	{
		return sessionFactory;
	}
}
A

Desculpe a ignorancia.

N, eu tinha testado na DAO.

N entendi como devo setar esse cacheMode nessa classe.

Como deveria ficar? no método estatico ou no metodo q retorna a session factory??

A

RESOLVIDO

Aí galera não tinha nada a ver com hibernate.

http://julianocarniel.blogspot.com/2007/12/problemas-com-hibernate-e-mysql.html

Criado 28 de janeiro de 2009
Ultima resposta 4 de fev. de 2009
Respostas 11
Participantes 3