Problema com Hibernate session.update(obj)

1 resposta
G

Boa noite a todos, tenho a seguinte situação:

Botão para salvar o meu formulário de alteração do cliente:
<h:panelGrid columns="3" cellpadding="3">
						<p:commandButton id="btSalvar" value="Salvar" actionListener="#{clienteMB.atualizar}" update="mensagens" onclick="saveDialog.show()" oncomplete="saveDialog.hide()" image="ui-icon ui-icon-disk"/>							
					</h:panelGrid>

Método do meu managebean para chamar o BO de atualização do cliente:

public void atualizar(){
		this.getCliente().setPessoa(getPessoa());
		Boolean b = super.validaTelefones();
		if(b == true){
			 FacesContextUtil.mensagemAtencao("Atenção: telefone e/ou celular obrigatório!");
			 return;
		} else {
			if(this.cliente.getPessoa().getEstado().equalsIgnoreCase("Selecione")){
				FacesContextUtil.mensagemAtencao("Atenção: selecione o Estado!");
				return;
			}
		}
		setValoresSemMascara();		
		b = clienteBO.atualizar(this.getCliente());
		if(b == true){
			 FacesContextUtil.mensagemSucesso("Cliente atualizado com sucesso!");		
		} else
			 FacesContextUtil.mensagemErro("Erro ao tentar atualizar este cliente! Favor entrar em contato com o analista responsável!"+
			 		"\nCausa: "+clienteBO.getCausa());
	}

BO para processar as regras e chamar o DAO:

public Boolean atualizar(Cliente c){
		try{
			clienteDAO.atualizar(c);
			return true;
		} catch (Exception e) {
			e.printStackTrace();
			this.setCausa(e.getCause().toString());
		}		
		return false;
	}

HibernateDAO genérico:

@Override
	public void atualizar(T bean) {
		session.update(bean);		
	}

Os métodos são todos chamados corretamente assim como os objetos são populados, o meu problema é que após o método atualizar(T bean) ser "supostamente" executado nada acontece, ou seja, os valores no banco de dados não estão sofrendo update, tanto é que nada aparece na console do programa, nenhum erro nem mesmo a query com o update. Alguém sabe o que pode ser isto? Desde já agradeço pela ajuda!

1 Resposta

G

Descobri o porque, minha clase para o controle do ciclo de vida do JSF não está funcionando corretamente, só gostaira de saber porque! No mais resolvi o meu problema fazendo um commit na minha transação.

minha classe para o controle de sessão:

public class ControleFases implements PhaseListener{

	@Override
	public void beforePhase(PhaseEvent fase)
	{	
		if(fase.getPhaseId().equals(PhaseId.RESTORE_VIEW)){
			System.out.println("INICIO DA SESSÃO HIBERNATE - RESTORE_VIEW");
			Session session = HibernateUtil.getSessionFactory().openSession();
			session.beginTransaction();
			FacesContextUtil.setRequestSession(session);
		}
		
	}
	
	@Override
	public void afterPhase(PhaseEvent fase) 
	{
		if(fase.getPhaseId().equals(PhaseId.RENDER_RESPONSE))
		{
			Session session = FacesContextUtil.getRequestSession();
			try
			{
				session.getTransaction().commit();
				System.out.println("FIM DA SESSÃO HIBERNATE - RENDER_RESPONSE");
			} catch (Exception e) 
			{
				System.out.println("Erro no commit da transação! ");
				System.out.println(e.getMessage());
				e.printStackTrace();
				if(session.getTransaction().isActive())
				{
					session.getTransaction().rollback();
				}
			} finally 
			{
				session.close();
			}
		}
	}

	@Override
	public PhaseId getPhaseId() {
		return PhaseId.ANY_PHASE;
	}
	
	
}

Dai quando eu recupero a sessão em alguma outra classe como nos managebean ela não vem já aberta e com a transação em aberto tbm, alguém sabe o porque?

Criado 27 de maio de 2011
Ultima resposta 28 de mai. de 2011
Respostas 1
Participantes 1