Criterias concorrentes retornam errado

Boa noite, amigos.
Meu problema é o seguinte:
meus metodos que buscam entidades dos bancos, utilizam o criteria.list…
por exemplo:

Criteria select = hbcon.createCriteria(Servidor.class); Collection<Servidor> col = select.list(); return col;
Funciona tranquilo, eu tenho metodos analogos a esse para cada entidade do meu banco… São meus metodos que listam as entidades.
Entretanto, se eu fiz uma alteração recente (adicionei um objeto da classe servidor, ou apaguei um), quando chamo concorrentemente dois metodos de listar, mesmo que de entidades diferentes (Servidor, como no exemplo acima, e Usuario, por exemplo), a resposta vem errada…
Se eu executar dois criteria.list ao mesmo tempo, ele acaba retornando dados desatualizados, por exemplo, objetos q jah ateh apaguei do banco…
Então… Como resolvo isso?
Eu poderia até usar o synchronized do java para nao deixar que eles fossem executados simultaneamente, mas tenho certeza que vocês tem uma solução melhor.
Aguardo retorno.
Obrigado

Ola Thitoh

Voce consegue dar informacoes mais detalhadas? Não há second level cache nem query cache ligado por aí? Mostre um trecho de código completo e o resultado… voce esta apagando/inserindo dados atraves do hibernate tambem ou através de outro sistema/linha de comando?

abraços

Sou novato em hibernate.
Onde vejo se há second level cache e query chache?
Porque na situacao citada (concorrencia de criteria.list) o hibernate esta retornando dados antigos, entao faz sentido ele estar pegando isso de um cache ou buffer.
O metodo hbcon.createCriteria(Servidor.class) que citei tem este corpo:

public Criteria createCriteria(Class classe) { return session.createCriteria(classe); }

Para inserir e apagar dados eu tambem utilizo o hibernate.

[code] public Long save(Object obj) {
Transaction t = session.beginTransaction();
Long id = (Long) session.save(obj);
t.commit();
return id;
}

public void saveOrUpdate(Object obj) {
	Transaction t = session.beginTransaction();
	session.saveOrUpdate(obj);
	t.commit();
}

public void delete(Object obj) {
	Transaction t = session.beginTransaction();
	session.delete(obj);
	t.commit();
}[/code]

e como voce esta invocando esses metodos?
mostre a ordem de invocacao que resulta nessa falta de informacao (e mostra o que voce faz concorrentemente)

Será que não tem haver com o tipo de transação? Serialize, commited e as outras duas que não lembro o nome?
Dai, se for uma Serialize claro que vc vai ter dados antigos nas suas invocações…