Problema de gravação de colunas com hibernate

Java

14/09/2011

Bom dia pessoa, estou com erro aqui que é muito estranho. Vou tentar explicar da melhor forma possível.Estou fazendo um sistema de controle pessoal, para estudar mesmo pois só iniciante ainda. E estou com o seguinte problema.Eu fiz o cadastro de usuários e cadastro de contas bancárias.No cadastro de usuário,  eu já deixei a opção para o usuário cadastrar sua primeira conta na hora do registro. Ele só pede o valor "descrição" e "saldo inicial".O problema é o seguinte:Quando eu crio a conta já no cadastro, ele salva todos os dados perfeitamente no banco de dados.Ao listar as contas ele me traz, descrição, data, saldo inicial, se é favorita ou não, e as opções de editar e excluir. Tudo isso é salvo perfeitamente no Banco de Dados.Porém, quando eu tento adicionar uma nova conta na pagina de contas, o que acontece é o seguinte.Eu coloco a descrição, coloco o saldo inicial.Mas no banco de dados, ele não está pegando nem a Descrição e nem o Saldo Inicial. O resto vai normalmente.
Veja como fica no banco de dados, as 2 contas que estão com as informações completas foram criadas na hora do registro, as outras pela pagina de contas.
+-----------+-------------+------------+---------------------+---------------+----------+| cod_conta | cod_usuario | des_conta  | dat_cadastro        | saldo_inicial | favorita |+-----------+-------------+------------+---------------------+---------------+----------+|         8 |           1 | Banco Itau | 2011-09-13 18:24:54 |          1000 |         ||        12 |           1 | NULL       | 2011-09-13 21:56:32 |             0 |          ||        13 |           1 | NULL       | 2011-09-13 21:57:15 |             0 |          ||        14 |           2 | Banco HSBC | 2011-09-13 21:58:24 |         10000 |         ||        18 |           2 | NULL       | 2011-09-13 22:56:59 |             0 |          |+-----------+-------------+------------+---------------------+---------------+----------+[code]
Alguém tem alguma idéia do que pode ser?Obrigado.
 
Dennis Faggiani

Dennis Faggiani

Curtidas 0

Respostas

Davi Costa

Davi Costa

14/09/2011

Seria interessante ver seus fontes, não tem como ajudar muito só assim. Mas uma coisa que não entendi essa nova conta é para o mesmo usuário?É criado uma conta nova, ou foi feito update na que já existia?

att Davi
GOSTEI 0
Dennis Faggiani

Dennis Faggiani

14/09/2011


Seria interessante ver seus fontes, não tem como ajudar muito só assim. Mas uma coisa que não entendi essa nova conta é para o mesmo usuário?É criado uma conta nova, ou foi feito update na que já existia?

att Davi

 
 
Olá Davi, obrigado pela resposta.Sim, a conta é para o mesmo usuário, isso é definido pelo código do usuário, e ele cria uma nova conta, não faz o update, eu não coloquei o codigo pois não sabia oq seria relevante, vou postar os codigos da contaClasse Conta[code]package financeiro.conta;
import java.io.Serializable;import java.util.Date;
import javax.persistence.Entity;import javax.persistence.*;import javax.persistence.Table;
import org.hibernate.annotations.*;

import financeiro.usuario.Usuario;
@Entity@Table(name="conta_bancaria")public class Conta implements Serializable {


private static final long serialVersionUID = 1L;
@Id @GeneratedValue @Column(name="cod_conta") private Integer conta;
@ManyToOne @OnDelete(action=OnDeleteAction.CASCADE) @JoinColumn(name = "cod_usuario", nullable = false) private Usuario usuario;
@Column(name="des_conta") private String descricao;
@Column(name="dat_cadastro", nullable = false, updatable = false) private Date dataCadastro;
@Column(name="saldo_inicial") private float saldoInicial;
@Column(name="favorita") private boolean favorita;
public Integer getConta() { return conta; }
public void setConta(Integer conta) { this.conta = conta; }
public Usuario getUsuario() { return usuario; }
public void setUsuario(Usuario usuario) { this.usuario = usuario; }
public String getDescricao() { return descricao; }
public void setDescricao(String descricao) { this.descricao = descricao; }
public Date getDataCadastro() { return dataCadastro; }
public void setDataCadastro(Date dataCadastro) { this.dataCadastro = dataCadastro; }
public float getSaldoInicial() { return saldoInicial; }
public void setSaldoInicial(float saldoInicial) { this.saldoInicial = saldoInicial; }
public boolean isFavorita() { return favorita; }
public void setFavorita(boolean favorita) { this.favorita = favorita; }
@Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((conta == null) ? 0 : conta.hashCode()); result = prime * result + ((dataCadastro == null) ? 0 : dataCadastro.hashCode()); result = prime * result + ((descricao == null) ? 0 : descricao.hashCode()); result = prime * result + (favorita ? 1231 : 1237); result = prime * result + ((usuario == null) ? 0 : usuario.hashCode()); result = prime * result + Float.floatToIntBits(saldoInicial); return result; }
@Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Conta other = (Conta) obj; if (conta == null) { if (other.conta != null) return false; } else if (!conta.equals(other.conta)) return false; if (dataCadastro == null) { if (other.dataCadastro != null) return false; } else if (!dataCadastro.equals(other.dataCadastro)) return false; if (descricao == null) { if (other.descricao != null) return false; } else if (!descricao.equals(other.descricao)) return false; if (favorita != other.favorita) return false; if (usuario == null) { if (other.usuario != null) return false; } else if (!usuario.equals(other.usuario)) return false; if (Float.floatToIntBits(saldoInicial) != Float.floatToIntBits(other.saldoInicial)) return false; return true; }
}[code]
Classe ContaDAO
[code]package financeiro.conta;
import java.util.List;
import financeiro.usuario.Usuario;
public interface ContaDAO {
public void salvar(Conta conta);
public void excluir(Conta conta);
public Conta carregar(Integer conta);
public List<Conta> listar(Usuario usuario);
public Conta buscarFavorita(Usuario usuario);}[code]
Classe ContaDAOHibernate[code]package financeiro.conta;
import java.util.List;
import org.hibernate.Criteria;import org.hibernate.Session;import org.hibernate.criterion.Restrictions;
import financeiro.usuario.Usuario;
public class ContaDAOHibernate implements ContaDAO {
private Session session;
public void setSession(Session session) { this.session = session; }
@Override public void excluir(Conta conta) { this.session.delete(conta); }
@Override public void salvar(Conta conta) { this.session.saveOrUpdate(conta); }
@Override public Conta carregar(Integer conta) { return (Conta) this.session.get(Conta.class, conta); }
@SuppressWarnings("unchecked") @Override public List<Conta> listar(Usuario usuario) {
Criteria criteria = this.session.createCriteria(Conta.class); criteria.add(Restrictions.eq("usuario", usuario));
return criteria.list(); }
@Override public Conta buscarFavorita(Usuario usuario) {
Criteria criteria = this.session.createCriteria(Conta.class); criteria.add(Restrictions.eq("usuario", usuario)); criteria.add(Restrictions.eq("favorita", true));
return (Conta) criteria.uniqueResult(); }}[code]
Classe ContaRN
[code]package financeiro.conta;
import java.util.Date;import java.util.List;
import financeiro.usuario.Usuario;import financeiro.util.DAOFactory;
public class ContaRN {
private ContaDAO contaDAO;
public ContaRN() { this.contaDAO = DAOFactory.criarContaDAO(); }
public List<Conta> listar(Usuario usuario) { return this.contaDAO.listar(usuario); }
public Conta carregar(Integer conta) { return this.contaDAO.carregar(conta); }
public void salvar(Conta conta) { conta.setDataCadastro(new Date()); this.contaDAO.salvar(conta); }
public void excluir(Conta conta) { this.contaDAO.excluir(conta); }
public void tornarFavorita(Conta contaFavorita) {  Conta conta = this.buscarFavorita(contaFavorita.getUsuario()); if (conta != null) { conta.setFavorita(false); this.contaDAO.salvar(conta); }
contaFavorita.setFavorita(true); this.contaDAO.salvar(contaFavorita); }
public Conta buscarFavorita(Usuario usuario) { return this.contaDAO.buscarFavorita(usuario); }}[code]
Classe ContaBean[code]package financeiro.web;
import java.util.List;
import javax.faces.bean.ManagedBean;import javax.faces.bean.RequestScoped;
import financeiro.conta.Conta;import financeiro.conta.ContaRN;import financeiro.web.util.ContextoUtil;
@ManagedBean(name="contaBean")@RequestScopedpublic class ContaBean {
private Conta selecionada = new Conta();private List<Conta> lista = null;
public void salvar(){ ContextoBean contextoBean = ContextoUtil.getContextoBean(); this.selecionada.setUsuario(contextoBean.getUsuarioLogado()); ContaRN contaRN = new ContaRN(); contaRN.salvar(this.selecionada); this.selecionada = new Conta(); this.lista = null;}
public void editar(){ }
public void excluir(){ ContaRN contaRN = new ContaRN(); contaRN.excluir(this.selecionada); this.selecionada = new Conta(); this.lista = null;}
public void tornarFavorita(){ ContaRN contaRN = new ContaRN(); contaRN.tornarFavorita(this.selecionada); this.selecionada = new Conta();}
public Conta getSelecionada() { return selecionada; }
public void setSelecionada(Conta selecionada) { this.selecionada = selecionada; }
public List<Conta> getLista() { if(this.lista == null){ ContextoBean contextoBean = ContextoUtil.getContextoBean(); ContaRN contaRN = new ContaRN(); this.lista = contaRN.listar(contextoBean.getUsuarioLogado()); } return this.lista; }
public void setLista(List<Conta> lista) { this.lista = lista; } }[code]
Classe UsuarioBean (onde eu inserir a opçao de cadastrar conta na hora do registro de usuario.
[code]package financeiro.web;
import java.util.List;
import javax.faces.application.FacesMessage;import javax.faces.bean.ManagedBean;import javax.faces.bean.RequestScoped;import javax.faces.context.FacesContext;
import financeiro.conta.Conta;import financeiro.conta.ContaRN;import financeiro.usuario.Usuario;import financeiro.usuario.UsuarioRN;
@ManagedBean(name = "usuarioBean")@RequestScopedpublic class UsuarioBean {

public Conta getConta() { return conta; }
public void setConta(Conta conta) { this.conta = conta; }
public void setLista(List<Usuario> lista) { this.lista = lista; }
private Usuario usuario = new Usuario(); private String confirmarSenha; private List<Usuario> lista; private String destinoSalvar; private Conta conta = new Conta();
public String novo() { this.destinoSalvar = "usuarioSucesso"; this.usuario = new Usuario(); this.usuario.setAtivo(true); return "usuario";
}
public String editar(){ this.confirmarSenha = this.usuario.getSenha(); return "/publico/usuario"; } public String salvar() { FacesContext context = FacesContext.getCurrentInstance();
String senha = this.usuario.getSenha(); if (!senha.equals(this.confirmarSenha)) { FacesMessage facesMessage = new FacesMessage( "A senha não foi informada corretamente"); context.addMessage(null, facesMessage); return null; } UsuarioRN usuarioRN = new UsuarioRN(); usuarioRN.salvar(this.usuario); if(this.conta.getDescricao() != null){ this.conta.setUsuario(this.usuario); this.conta.setFavorita(true); ContaRN contaRN = new ContaRN(); contaRN.salvar(this.conta); } return this.destinoSalvar; } public String excluir(){ UsuarioRN usuarioRN = new UsuarioRN(); usuarioRN.excluir(this.usuario); this.lista = null; return null; } public String ativar(){ if(this.usuario.isAtivo()){ this.usuario.setAtivo(false); } else { this.usuario.setAtivo(true); } UsuarioRN usuarioRN = new UsuarioRN(); usuarioRN.salvar(this.usuario); return null; } public List<Usuario> getLista(){ if(this.lista == null){ UsuarioRN usuarioRN = new UsuarioRN(); this.lista = usuarioRN.listar(); } return this.lista; } public String atribuirPermissao(Usuario usuario, String permissao){ this.usuario = usuario; java.util.Set<String> permissoes = this.usuario.getPermissao(); if(permissoes.contains(permissao)){ permissoes.remove(permissao); } else { permissoes.add(permissao); } return null; }
@Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((confirmarSenha == null) ? 0 : confirmarSenha.hashCode()); result = prime * result + ((conta == null) ? 0 : conta.hashCode()); result = prime * result + ((destinoSalvar == null) ? 0 : destinoSalvar.hashCode()); result = prime * result + ((lista == null) ? 0 : lista.hashCode()); result = prime * result + ((usuario == null) ? 0 : usuario.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; UsuarioBean other = (UsuarioBean) obj; if (confirmarSenha == null) { if (other.confirmarSenha != null) return false; } else if (!confirmarSenha.equals(other.confirmarSenha)) return false; if (conta == null) { if (other.conta != null) return false; } else if (!conta.equals(other.conta)) return false; if (destinoSalvar == null) { if (other.destinoSalvar != null) return false; } else if (!destinoSalvar.equals(other.destinoSalvar)) return false; if (lista == null) { if (other.lista != null) return false; } else if (!lista.equals(other.lista)) return false; if (usuario == null) { if (other.usuario != null) return false; } else if (!usuario.equals(other.usuario)) return false; return true; }
public Usuario getUsuario() { return usuario; }
public void setUsuario(Usuario usuario) { this.usuario = usuario; }
public String getConfirmarSenha() { return confirmarSenha; }
public void setConfirmarSenha(String confirmarSenha) { this.confirmarSenha = confirmarSenha; }
public String getDestinoSalvar() { return destinoSalvar; } public void setDestinoSalvar(String destinoSalvar) { this.destinoSalvar = destinoSalvar; } }[code]
e os JSFTela de cadastro de conta[code]package financeiro.web;
import java.util.List;
import javax.faces.application.FacesMessage;import javax.faces.bean.ManagedBean;import javax.faces.bean.RequestScoped;import javax.faces.context.FacesContext;
import financeiro.conta.Conta;import financeiro.conta.ContaRN;import financeiro.usuario.Usuario;import financeiro.usuario.UsuarioRN;
@ManagedBean(name = "usuarioBean")@RequestScopedpublic class UsuarioBean {

public Conta getConta() { return conta; }
public void setConta(Conta conta) { this.conta = conta; }
public void setLista(List<Usuario> lista) { this.lista = lista; }
private Usuario usuario = new Usuario(); private String confirmarSenha; private List<Usuario> lista; private String destinoSalvar; private Conta conta = new Conta();
public String novo() { this.destinoSalvar = "usuarioSucesso"; this.usuario = new Usuario(); this.usuario.setAtivo(true); return "usuario";
}
public String editar(){ this.confirmarSenha = this.usuario.getSenha(); return "/publico/usuario"; } public String salvar() { FacesContext context = FacesContext.getCurrentInstance();
String senha = this.usuario.getSenha(); if (!senha.equals(this.confirmarSenha)) { FacesMessage facesMessage = new FacesMessage( "A senha não foi informada corretamente"); context.addMessage(null, facesMessage); return null; } UsuarioRN usuarioRN = new UsuarioRN(); usuarioRN.salvar(this.usuario); if(this.conta.getDescricao() != null){ this.conta.setUsuario(this.usuario); this.conta.setFavorita(true); ContaRN contaRN = new ContaRN(); contaRN.salvar(this.conta); } return this.destinoSalvar; } public String excluir(){ UsuarioRN usuarioRN = new UsuarioRN(); usuarioRN.excluir(this.usuario); this.lista = null; return null; } public String ativar(){ if(this.usuario.isAtivo()){ this.usuario.setAtivo(false); } else { this.usuario.setAtivo(true); } UsuarioRN usuarioRN = new UsuarioRN(); usuarioRN.salvar(this.usuario); return null; } public List<Usuario> getLista(){ if(this.lista == null){ UsuarioRN usuarioRN = new UsuarioRN(); this.lista = usuarioRN.listar(); } return this.lista; } public String atribuirPermissao(Usuario usuario, String permissao){ this.usuario = usuario; java.util.Set<String> permissoes = this.usuario.getPermissao(); if(permissoes.contains(permissao)){ permissoes.remove(permissao); } else { permissoes.add(permissao); } return null; }
@Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((confirmarSenha == null) ? 0 : confirmarSenha.hashCode()); result = prime * result + ((conta == null) ? 0 : conta.hashCode()); result = prime * result + ((destinoSalvar == null) ? 0 : destinoSalvar.hashCode()); result = prime * result + ((lista == null) ? 0 : lista.hashCode()); result = prime * result + ((usuario == null) ? 0 : usuario.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; UsuarioBean other = (UsuarioBean) obj; if (confirmarSenha == null) { if (other.confirmarSenha != null) return false; } else if (!confirmarSenha.equals(other.confirmarSenha)) return false; if (conta == null) { if (other.conta != null) return false; } else if (!conta.equals(other.conta)) return false; if (destinoSalvar == null) { if (other.destinoSalvar != null) return false; } else if (!destinoSalvar.equals(other.destinoSalvar)) return false; if (lista == null) { if (other.lista != null) return false; } else if (!lista.equals(other.lista)) return false; if (usuario == null) { if (other.usuario != null) return false; } else if (!usuario.equals(other.usuario)) return false; return true; }
public Usuario getUsuario() { return usuario; }
public void setUsuario(Usuario usuario) { this.usuario = usuario; }
public String getConfirmarSenha() { return confirmarSenha; }
public void setConfirmarSenha(String confirmarSenha) { this.confirmarSenha = confirmarSenha; }
public String getDestinoSalvar() { return destinoSalvar; } public void setDestinoSalvar(String destinoSalvar) { this.destinoSalvar = destinoSalvar; } }[code]
E no cadastro de usuario
[code]package financeiro.web;
import java.util.List;
import javax.faces.application.FacesMessage;import javax.faces.bean.ManagedBean;import javax.faces.bean.RequestScoped;import javax.faces.context.FacesContext;
import financeiro.conta.Conta;import financeiro.conta.ContaRN;import financeiro.usuario.Usuario;import financeiro.usuario.UsuarioRN;
@ManagedBean(name = "usuarioBean")@RequestScopedpublic class UsuarioBean {

public Conta getConta() { return conta; }
public void setConta(Conta conta) { this.conta = conta; }
public void setLista(List<Usuario> lista) { this.lista = lista; }
private Usuario usuario = new Usuario(); private String confirmarSenha; private List<Usuario> lista; private String destinoSalvar; private Conta conta = new Conta();
public String novo() { this.destinoSalvar = "usuarioSucesso"; this.usuario = new Usuario(); this.usuario.setAtivo(true); return "usuario";
}
public String editar(){ this.confirmarSenha = this.usuario.getSenha(); return "/publico/usuario"; } public String salvar() { FacesContext context = FacesContext.getCurrentInstance();
String senha = this.usuario.getSenha(); if (!senha.equals(this.confirmarSenha)) { FacesMessage facesMessage = new FacesMessage( "A senha não foi informada corretamente"); context.addMessage(null, facesMessage); return null; } UsuarioRN usuarioRN = new UsuarioRN(); usuarioRN.salvar(this.usuario); if(this.conta.getDescricao() != null){ this.conta.setUsuario(this.usuario); this.conta.setFavorita(true); ContaRN contaRN = new ContaRN(); contaRN.salvar(this.conta); } return this.destinoSalvar; } public String excluir(){ UsuarioRN usuarioRN = new UsuarioRN(); usuarioRN.excluir(this.usuario); this.lista = null; return null; } public String ativar(){ if(this.usuario.isAtivo()){ this.usuario.setAtivo(false); } else { this.usuario.setAtivo(true); } UsuarioRN usuarioRN = new UsuarioRN(); usuarioRN.salvar(this.usuario); return null; } public List<Usuario> getLista(){ if(this.lista == null){ UsuarioRN usuarioRN = new UsuarioRN(); this.lista = usuarioRN.listar(); } return this.lista; } public String atribuirPermissao(Usuario usuario, String permissao){ this.usuario = usuario; java.util.Set<String> permissoes = this.usuario.getPermissao(); if(permissoes.contains(permissao)){ permissoes.remove(permissao); } else { permissoes.add(permissao); } return null; }
@Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((confirmarSenha == null) ? 0 : confirmarSenha.hashCode()); result = prime * result + ((conta == null) ? 0 : conta.hashCode()); result = prime * result + ((destinoSalvar == null) ? 0 : destinoSalvar.hashCode()); result = prime * result + ((lista == null) ? 0 : lista.hashCode()); result = prime * result + ((usuario == null) ? 0 : usuario.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; UsuarioBean other = (UsuarioBean) obj; if (confirmarSenha == null) { if (other.confirmarSenha != null) return false; } else if (!confirmarSenha.equals(other.confirmarSenha)) return false; if (conta == null) { if (other.conta != null) return false; } else if (!conta.equals(other.conta)) return false; if (destinoSalvar == null) { if (other.destinoSalvar != null) return false; } else if (!destinoSalvar.equals(other.destinoSalvar)) return false; if (lista == null) { if (other.lista != null) return false; } else if (!lista.equals(other.lista)) return false; if (usuario == null) { if (other.usuario != null) return false; } else if (!usuario.equals(other.usuario)) return false; return true; }
public Usuario getUsuario() { return usuario; }
public void setUsuario(Usuario usuario) { this.usuario = usuario; }
public String getConfirmarSenha() { return confirmarSenha; }
public void setConfirmarSenha(String confirmarSenha) { this.confirmarSenha = confirmarSenha; }
public String getDestinoSalvar() { return destinoSalvar; } public void setDestinoSalvar(String destinoSalvar) { this.destinoSalvar = destinoSalvar; } }[code]
Obrigado.
GOSTEI 0
Dennis Faggiani

Dennis Faggiani

14/09/2011

Seria interessante ver seus fontes, não tem como ajudar muito só assim. Mas uma coisa que não entendi essa nova conta é para o mesmo usuário?É criado uma conta nova, ou foi feito update na que já existia?

att Davi

 
  
Olá Davi, obrigado pela resposta.Sim, a conta é para o mesmo usuário, isso é definido pelo código do usuário, e ele cria uma nova conta, não faz o update, eu não coloquei o codigo pois não sabia oq seria relevante, vou postar os codigos da conta

Classe Conta
package financeiro.conta;
import java.io.Serializable;import java.util.Date;
import javax.persistence.Entity;import javax.persistence.*;import javax.persistence.Table;
import org.hibernate.annotations.*;

import financeiro.usuario.Usuario;
@Entity@Table(name="conta_bancaria")public class Conta implements Serializable {


		private static final long serialVersionUID = 1L;
	@Id	@GeneratedValue	@Column(name="cod_conta")	private Integer	conta;
	@ManyToOne	@OnDelete(action=OnDeleteAction.CASCADE)	@JoinColumn(name = "cod_usuario", nullable = false)	private Usuario	usuario;
	@Column(name="des_conta")	private String descricao;
	@Column(name="dat_cadastro", nullable = false, updatable = false)	private Date dataCadastro;
	@Column(name="saldo_inicial")	private float saldoInicial;
	@Column(name="favorita")	private boolean	favorita;
	public Integer getConta() {		return conta;	}
	public void setConta(Integer conta) {		this.conta = conta;	}
	public Usuario getUsuario() {		return usuario;	}
	public void setUsuario(Usuario usuario) {		this.usuario = usuario;	}
	public String getDescricao() {		return descricao;	}
	public void setDescricao(String descricao) {		this.descricao = descricao;	}
	public Date getDataCadastro() {		return dataCadastro;	}
	public void setDataCadastro(Date dataCadastro) {		this.dataCadastro = dataCadastro;	}
	public float getSaldoInicial() {		return saldoInicial;	}
	public void setSaldoInicial(float saldoInicial) {		this.saldoInicial = saldoInicial;	}
	public boolean isFavorita() {		return favorita;	}
	public void setFavorita(boolean favorita) {		this.favorita = favorita;	}
	@Override	public int hashCode() {		final int prime = 31;		int result = 1;		result = prime * result + ((conta == null) ? 0 : conta.hashCode());		result = prime * result + ((dataCadastro == null) ? 0 : dataCadastro.hashCode());		result = prime * result + ((descricao == null) ? 0 : descricao.hashCode());		result = prime * result + (favorita ? 1231 : 1237);		result = prime * result + ((usuario == null) ? 0 : usuario.hashCode());		result = prime * result + Float.floatToIntBits(saldoInicial);		return result;	}
	@Override	public boolean equals(Object obj) {		if (this == obj)			return true;		if (obj == null)			return false;		if (getClass() != obj.getClass())			return false;		Conta other = (Conta) obj;		if (conta == null) {			if (other.conta != null)				return false;		} else if (!conta.equals(other.conta))			return false;		if (dataCadastro == null) {			if (other.dataCadastro != null)				return false;		} else if (!dataCadastro.equals(other.dataCadastro))			return false;		if (descricao == null) {			if (other.descricao != null)				return false;		} else if (!descricao.equals(other.descricao))			return false;		if (favorita != other.favorita)			return false;		if (usuario == null) {			if (other.usuario != null)				return false;		} else if (!usuario.equals(other.usuario))			return false;		if (Float.floatToIntBits(saldoInicial) != Float.floatToIntBits(other.saldoInicial))			return false;		return true;	}
}

Classe ContaDAO
package financeiro.conta;
import java.util.List;
import financeiro.usuario.Usuario;
public interface ContaDAO {
	public void salvar(Conta conta);
	public void excluir(Conta conta);
	public Conta carregar(Integer conta);
	public List<Conta> listar(Usuario usuario);
	public Conta buscarFavorita(Usuario usuario);}

Classe ContaDAOHibernate
package financeiro.conta;
import java.util.List;
import org.hibernate.Criteria;import org.hibernate.Session;import org.hibernate.criterion.Restrictions;
import financeiro.usuario.Usuario;
public class ContaDAOHibernate implements ContaDAO {
	private Session	session;
	public void setSession(Session session) {		this.session = session;	}
	@Override	public void excluir(Conta conta) {		this.session.delete(conta);	}
	@Override	public void salvar(Conta conta) {		this.session.saveOrUpdate(conta);	}
	@Override	public Conta carregar(Integer conta) {		return (Conta) this.session.get(Conta.class, conta);	}
	@SuppressWarnings("unchecked")	@Override	public List<Conta> listar(Usuario usuario) {
		Criteria criteria = this.session.createCriteria(Conta.class);		criteria.add(Restrictions.eq("usuario", usuario));
		return criteria.list();	}
	@Override	public Conta buscarFavorita(Usuario usuario) {
		Criteria criteria = this.session.createCriteria(Conta.class);		criteria.add(Restrictions.eq("usuario", usuario));		criteria.add(Restrictions.eq("favorita", true));
		return (Conta) criteria.uniqueResult();	}}

Classe ContaRN
package financeiro.conta;
import java.util.Date;import java.util.List;
import financeiro.usuario.Usuario;import financeiro.util.DAOFactory;
public class ContaRN {
	private ContaDAO contaDAO;
	public ContaRN() {		this.contaDAO = DAOFactory.criarContaDAO();	}
	public List<Conta> listar(Usuario usuario) {		return this.contaDAO.listar(usuario);	}
	public Conta carregar(Integer conta) {		return this.contaDAO.carregar(conta);	}
	public void salvar(Conta conta) {		conta.setDataCadastro(new Date());		this.contaDAO.salvar(conta);	}
	public void excluir(Conta conta) {		this.contaDAO.excluir(conta);	}
	public void tornarFavorita(Conta contaFavorita) { 		Conta conta = this.buscarFavorita(contaFavorita.getUsuario());		if (conta != null) {			conta.setFavorita(false);			this.contaDAO.salvar(conta);		}
		contaFavorita.setFavorita(true);		this.contaDAO.salvar(contaFavorita);	}
	public Conta buscarFavorita(Usuario usuario) {		return this.contaDAO.buscarFavorita(usuario);	}}

Classe ContaBean
package financeiro.web;
import java.util.List;
import javax.faces.bean.ManagedBean;import javax.faces.bean.RequestScoped;
import financeiro.conta.Conta;import financeiro.conta.ContaRN;import financeiro.web.util.ContextoUtil;
@ManagedBean(name="contaBean")@RequestScopedpublic class ContaBean {
private Conta selecionada = new Conta();private List<Conta> lista = null;
public void salvar(){	ContextoBean contextoBean = ContextoUtil.getContextoBean();	this.selecionada.setUsuario(contextoBean.getUsuarioLogado());	ContaRN contaRN = new ContaRN();	contaRN.salvar(this.selecionada);	this.selecionada = new Conta();	this.lista = null;}
public void editar(){	}
public void excluir(){	ContaRN contaRN = new ContaRN();	contaRN.excluir(this.selecionada);	this.selecionada = new Conta();	this.lista = null;}
public void tornarFavorita(){	ContaRN contaRN = new ContaRN();	contaRN.tornarFavorita(this.selecionada);	this.selecionada = new Conta();}
	public Conta getSelecionada() {		return selecionada;	}
	public void setSelecionada(Conta selecionada) {		this.selecionada = selecionada;	}
	public List<Conta> getLista() {		if(this.lista == null){			ContextoBean contextoBean = ContextoUtil.getContextoBean();			ContaRN contaRN = new ContaRN();			this.lista = contaRN.listar(contextoBean.getUsuarioLogado());		}				return this.lista;	}
	public void setLista(List<Conta> lista) {		this.lista = lista;	}			}

Classe UsuarioBean (onde eu inserir a opçao de cadastrar conta na hora do registro de usuario.
package financeiro.web;
import java.util.List;
import javax.faces.application.FacesMessage;import javax.faces.bean.ManagedBean;import javax.faces.bean.RequestScoped;import javax.faces.context.FacesContext;
import financeiro.conta.Conta;import financeiro.conta.ContaRN;import financeiro.usuario.Usuario;import financeiro.usuario.UsuarioRN;
@ManagedBean(name = "usuarioBean")@RequestScopedpublic class UsuarioBean {

	public Conta getConta() {		return conta;	}
	public void setConta(Conta conta) {		this.conta = conta;	}
	public void setLista(List<Usuario> lista) {		this.lista = lista;	}
	private Usuario usuario = new Usuario();	private String confirmarSenha;	private List<Usuario> lista;	private String destinoSalvar;	private Conta conta = new Conta();
	public String novo() {		this.destinoSalvar = "usuarioSucesso";		this.usuario = new Usuario();		this.usuario.setAtivo(true);		return "usuario";
	}
	public String editar(){		this.confirmarSenha = this.usuario.getSenha();		return "/publico/usuario";	}		public String salvar() {		FacesContext context = FacesContext.getCurrentInstance();
		String senha = this.usuario.getSenha();		if (!senha.equals(this.confirmarSenha)) {			FacesMessage facesMessage = new FacesMessage(					"A senha não foi informada corretamente");			context.addMessage(null, facesMessage);			return null;		}		UsuarioRN usuarioRN = new UsuarioRN();		usuarioRN.salvar(this.usuario);				if(this.conta.getDescricao() != null){			this.conta.setUsuario(this.usuario);			this.conta.setFavorita(true);			ContaRN contaRN = new ContaRN();			contaRN.salvar(this.conta);		}		return this.destinoSalvar;	}		public String excluir(){		UsuarioRN usuarioRN = new UsuarioRN();		usuarioRN.excluir(this.usuario);		this.lista = null;		return null;	}		public String ativar(){		if(this.usuario.isAtivo()){			this.usuario.setAtivo(false);		} else {			this.usuario.setAtivo(true);		}			UsuarioRN usuarioRN = new UsuarioRN();			usuarioRN.salvar(this.usuario);			return null;	}		public List<Usuario> getLista(){		if(this.lista == null){			UsuarioRN usuarioRN = new UsuarioRN();			this.lista = usuarioRN.listar();		}		return this.lista;	}		public String atribuirPermissao(Usuario usuario, String permissao){		this.usuario = usuario;		java.util.Set<String> permissoes = this.usuario.getPermissao();		if(permissoes.contains(permissao)){			permissoes.remove(permissao);		} else {			permissoes.add(permissao);		}		return null;	}
		@Override	public int hashCode() {		final int prime = 31;		int result = 1;		result = prime * result				+ ((confirmarSenha == null) ? 0 : confirmarSenha.hashCode());		result = prime * result + ((conta == null) ? 0 : conta.hashCode());		result = prime * result				+ ((destinoSalvar == null) ? 0 : destinoSalvar.hashCode());		result = prime * result + ((lista == null) ? 0 : lista.hashCode());		result = prime * result + ((usuario == null) ? 0 : usuario.hashCode());		return result;	}		@Override	public boolean equals(Object obj) {		if (this == obj)			return true;		if (obj == null)			return false;		if (getClass() != obj.getClass())			return false;		UsuarioBean other = (UsuarioBean) obj;		if (confirmarSenha == null) {			if (other.confirmarSenha != null)				return false;		} else if (!confirmarSenha.equals(other.confirmarSenha))			return false;		if (conta == null) {			if (other.conta != null)				return false;		} else if (!conta.equals(other.conta))			return false;		if (destinoSalvar == null) {			if (other.destinoSalvar != null)				return false;		} else if (!destinoSalvar.equals(other.destinoSalvar))			return false;		if (lista == null) {			if (other.lista != null)				return false;		} else if (!lista.equals(other.lista))			return false;		if (usuario == null) {			if (other.usuario != null)				return false;		} else if (!usuario.equals(other.usuario))			return false;		return true;	}
	public Usuario getUsuario() {		return usuario;	}
	public void setUsuario(Usuario usuario) {		this.usuario = usuario;	}
	public String getConfirmarSenha() {		return confirmarSenha;	}
	public void setConfirmarSenha(String confirmarSenha) {		this.confirmarSenha = confirmarSenha;	}
	public String getDestinoSalvar() {		return destinoSalvar;	}		public void setDestinoSalvar(String destinoSalvar) {		this.destinoSalvar = destinoSalvar;	}		}

e os JSFTela de cadastro de conta
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"	xmlns:h="http://java.sun.com/jsf/html"	xmlns:f="http://java.sun.com/jsf/core"	xmlns:sec="http://www.springframework.org/security/facelets/tags"><h:head>	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />	<title>Cadastro de Contas</title></h:head><h:body>	<h1>Cadastro de Contas</h1>	<h:form id="edicao">		<h:messages />		<h:inputHidden value="#{contaBean.selecionada.conta }" />		<h:inputHidden value="#{contaBean.selecionada.favorita }" />		<h:panelGrid columns="2">			<h:outputLabel value="Descrição: " for="descricao" />			<h:inputText id="descricao"				value="#{contaBean.selecionada.descricao }" required="true"				maxLength="45" />			<h:outputLabel value="Saldo Inicial: " for="saldoInicial" />			<h:inputText id="saldoInicial"				value="#{contaBean.selecionada.saldoInicial }" size="10">				<f:convertNumber minFractionDigits="2" />			</h:inputText>			<h:commandButton value="Salvar" action="#{contaBean.salvar }">				<f:ajax excute="@form" render=":edicao :listagem" />			</h:commandButton>		</h:panelGrid>

	</h:form>
	<h:form id="listagem">		<h:dataTable value="#{contaBean.lista }" var="conta"			rendered="#{!empty contaBean.lista }">			<h:column>				<f:facet name="header">Descrição</f:facet>			#{conta.descricao}			</h:column>			<h:column>				<f:facet name="header">Data Cadastro</f:facet>				<h:outputText value="#{conta.dataCadastro }">					<f:convertDateTime pattern="dd/MM/yyyy" />				</h:outputText>			</h:column>			<h:column>				<f:facet name="header">Saldo Inicial</f:facet>				<h:outputText value="#{ conta.saldoInicial}"					style="text-align: right; display:block;">					<f:convertNumber minFractionDigits="2" />				</h:outputText>			</h:column>			<h:column>				<h:commandLink action="#{contaBean.tornarFavorita }">					<f:ajax execute="@this" render=":listagem" />					<h:graphicImage library="imagens"						name="favorita16_#{conta.favorita }.png" />					<f:setPropertyActionListener value="#{conta }"						target="#{contaBean.selecionada }" />				</h:commandLink>			</h:column>			<h:column>				<h:commandLink>					<f:ajax execute="@this" render=":edicao" />					<h:graphicImage library="imagens" name="editar16.png" />					<f:setPropertyActionListener value="#{conta }"						target="#{contaBean.selecionada }" />				</h:commandLink>			</h:column>			<h:column>				<h:commandLink action="#{contaBean.excluir }">					<f:ajax execute="@this" render=":listagem" />					<h:graphicImage library="imagens" name="excluir16.png" />					<f:setPropertyActionListener value="#{conta }"						target="#{contaBean.selecionada }" />				</h:commandLink>			</h:column>		</h:dataTable>	</h:form>
</h:body></html>

E no cadastro de usuario
<?xml version="1.0" encoding="UTF-8" ?><html xmlns="http://www.w3.org/1999/xhtml"	xmlns:h="http://java.sun.com/jsf/html"	xmlns:f="http://java.sun.com/jsf/core"><h:head>	<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />	<title>Cadasro de Usuarios</title></h:head><h:body>	<h1>Cadastro de Usuários</h1>
	<h:form id="cadastro">		<h:messages />		<h:inputHidden value="#{usuarioBean.usuario.codigo }" />		<h:inputHidden value="#{usuarioBean.usuario.ativo }" />		<h:inputHidden value="#{usuarioBean.destinoSalvar}" />
		<h:panelGrid columns="2">			<h:outputLabel value="Nome" for="nome" />			<h:inputText id="nome" Label="Nome"				value="#{usuarioBean.usuario.nome }" size="30" maxLength="30"				required="true" requiredMessage="Por favor, insira um nome">				<f:validateLength minimum="10" maximum="30" />			</h:inputText>			<h:outputLabel value="Data Nascimento" for="data" />			<h:inputText id="data" label="Data Nascimento"				value="#{usuarioBean.usuario.nascimento}" size="10" maxlength="10"				required="false">				<f:convertDateTime pattern="dd/MM/yyyy" />			</h:inputText>			<h:outputLabel value="Celular" for="celular" />			<h:inputText id="celular" label="Celular"				value="#{usuarioBean.usuario.celular}" size="10" />			<h:outputLabel value="E-mail" for="email" />			<h:panelGroup>				<h:inputText id="email" label="E-mail"					value="#{usuarioBean.usuario.email}" size="50" required="true"					validatorMessage="e-mail inválido">					<f:validateRegex pattern="[a-zA-Z0-9\-\_\.]+@[a-zA-Z0-9\-\_\.]+" />				</h:inputText>				<h:message for="email" />			</h:panelGroup>
			<h:outputLabel value="Idioma" for="idioma" />			<h:selectOneMenu id="idioma" value="#{usuarioBean.usuario.idioma}">				<f:selectItem itemValue="pt_BR" itemLabel="Português" />				<f:selectItem itemValue="en_US" itemLabel="English" />				<f:selectItem itemValue="es_ES" itemLabel="Espanol" />			</h:selectOneMenu>
			<h:outputLabel value="Login" for="login" />			<h:inputText id="login" label="Login"				value="#{usuarioBean.usuario.login}" size="15" maxlength="15"				required="true"				validatorMessage="Login deve ter no minimo 5 e no máximo 15 caracteres, e só pode ter simbolos '.' e '_'. ">				<f:validateRegex pattern="([a-z]|[0-9]|[.]|[_]){2,15}" />			</h:inputText>
			<h:outputLabel value="Senha" for="senha" />			<h:inputSecret id="senha" label="Senha"				value="#{usuarioBean.usuario.senha}" size="10" maxlength="10"				required="true" redisplay="true" />
			<h:outputLabel value="Confirmar senha" for="confirmarSenha" />			<h:inputSecret id="confirmarSenha" label="Confirmar senha"				value="#{usuarioBean.confirmarSenha}" size="10" maxlength="10"				required="true" redisplay="true" />
		</h:panelGrid>		<h:panelGroup rendered="#{empty contextoBean.usuarioLogado}">		<fieldset><legend>Conta Inicial</legend>		<h:panelGrid columns="2">				<h:outputLabel value="Descrição" for="descricao" />		<h:inputText id="descricao" label="Descrição" value="#{usuarioBean.conta.descricao}" required="true" maxlength="45" />		<h:outputLabel value="Saldo inicial" for="saldoInicial" />		<h:inputText id="saldoInicial" label="Saldo Inicial" value="#{usuarioBean.conta.saldoInicial}" size="10">		<f:convertNumber minFractionDigits="2" />		</h:inputText>		</h:panelGrid>				</fieldset>		</h:panelGroup>		<h:commandButton action="#{usuarioBean.salvar}" value="Salvar" />					</h:form>
</h:body></html>

Obrigado.

Obrigado.
GOSTEI 0
Dyego Carmo

Dyego Carmo

14/09/2011

Pelo visto o que está acontecendo é que vc esta alterando o valor do objeto depois de persisti-lo... o hibernate vai tentar atualiza-lo e esta "truncado" a informacao... chegou a tentar dar um ".evict" no objeto depois de persisti-lo ?
GOSTEI 0
POSTAR