Problemas ao retornar valores

2 respostas
leonardoterrao

Olá pessoal!

Estou com um probleminha aqui !

Em minha aplicação quando faço login com uma conta normal ele faz o select verificando e me retorna o objeto se ele existir no banco, depois se eu fizer logout desta conta entrar com uma de administrador e bloquear o outro usuário que eu havia entrado ou fazer alguma alteração nele, quando faço login nele novamente ele me retorna o mesmo objeto que fiz o login pela primeira vez não mostrando as alterações, as alterações são visíveis no banco e só fica normal na aplicação quando reinicio o Tomcat e o Hibernate levanta de novo.

aqui está o código de busca do login:
public class LoginDAO extends AbstractDAO {

	EntityManager em =  getEMF().createEntityManager();

	@SuppressWarnings("unchecked")
	public UsuarioDTO getLogin(String email, String senha) {

		em.getTransaction().begin();

		ArrayList<UsuarioDTO> usuarios = new ArrayList<UsuarioDTO>(em.createQuery("from UsuarioDTO u where u.email = '" + email	+ "' and u.senha = md5('" + senha + "')").getResultList());

		em.getTransaction().commit();
		UsuarioDTO usuario = new UsuarioDTO();

		if (usuarios.size() == 1) {
			Long id = usuarios.get(0).getId();
			usuario = em.find(UsuarioDTO.class, id);
			
			usuario.setLoggedIn(true);
		}
		return usuario;
	}
}

Vocês sabem o que poderia estar acontecendo ou alguma maneira de eu fazer com que ele pegue novamente o objeto com as alterações sem ter que reiniciar o Tomcat?

Obrigado!
Leonardo Terrão.

2 Respostas

mauricioadl

o hibernate esta gravando no cache dele, vc pode desabilitar ou dar um clear nele.

[]'s

leonardoterrao

mauricioadl muito obrigado!

consegui aqui !

adicionei
em.clear()
antes de iniciar a transação.
em.getTransaction().begin();
...
EntityManager em =  getEMF().createEntityManager();

	@SuppressWarnings("unchecked")
	public UsuarioDTO getLogin(String email, String senha) {

		em.clear();
		em.getTransaction().begin();

		ArrayList<UsuarioDTO> usuarios = new ArrayList<UsuarioDTO>(em.createQuery("from UsuarioDTO u where u.email = '" + email	+ "' and u.senha = md5('" + senha + "')").getResultList());

		em.getTransaction().commit();

...

Obrigado !

Criado 20 de março de 2012
Ultima resposta 20 de mar. de 2012
Respostas 2
Participantes 2