Hibernate não faz update em tabela

Esta é minha classe:

[code]package br.com.caioaraujo.sige.model.mapping;

import java.util.Date;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.Lob;
import javax.persistence.ManyToOne;
import javax.persistence.OneToOne;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

import org.hibernate.annotations.Type;

import br.com.caioaraujo.sige.control.impl.utils.IAtivo;

@Entity
public class Membro implements IAtivo{

@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Integer idMembro;

@Lob
private byte[] foto;

@Column
private Boolean ativo;

@ManyToOne(cascade=CascadeType.ALL)
@JoinColumn(name="idPessoaFisica")
private PessoaFisica dadosPessoa;

@Column(length=50)
private String nomePai;

@Column(length=50)
private String nomeMae;

@OneToOne
private Cidade cidadeNascimento;

@Temporal(TemporalType.DATE)
private Date dataCasamento;

@Column
private String conjuge;

@Column(length=2)
private Integer qtdeFilhos;

@ManyToOne(cascade=CascadeType.ALL)
@JoinColumn(name="idMembroHistorico")
private MembroHistorico membresia;

public boolean isAtivo() {
	return ativo;
}

public Integer getIdMembro() {
	return idMembro;
}

public byte[] getFoto() {
	return foto;
}

public PessoaFisica getDadosPessoa() {
	return dadosPessoa;
}

public String getNomePai() {
	return nomePai;
}

public String getNomeMae() {
	return nomeMae;
}

public Cidade getCidadeNascimento() {
	return cidadeNascimento;
}

public Date getDataCasamento() {
	return dataCasamento;
}

public String getConjuge() {
	return conjuge;
}

public Integer getQtdeFilhos() {
	return qtdeFilhos;
}

public MembroHistorico getMembresia() {
	return membresia;
}

public void setIdMembro(Integer idMembro) {
	this.idMembro = idMembro;
}

public void setFoto(byte[] foto) {
	this.foto = foto;
}

public void setAtivo(boolean ativo) {
	this.ativo = ativo;
}

public void setDadosPessoa(PessoaFisica dadosPessoa) {
	this.dadosPessoa = dadosPessoa;
}

public void setNomePai(String nomePai) {
	this.nomePai = nomePai;
}

public void setNomeMae(String nomeMae) {
	this.nomeMae = nomeMae;
}

public void setCidadeNascimento(Cidade cidadeNascimento) {
	this.cidadeNascimento = cidadeNascimento;
}

public void setDataCasamento(Date dataCasamento) {
	this.dataCasamento = dataCasamento;
}

public void setConjuge(String conjuge) {
	this.conjuge = conjuge;
}

public void setQtdeFilhos(Integer qtdeFilhos) {
	this.qtdeFilhos = qtdeFilhos;
}

public void setMembresia(MembroHistorico membresia) {
	this.membresia = membresia;
}

}
[/code]

Este é o meu dao

	public void update(Membro membro)
	{
		sf = HibernateUtil.getSessionFactory();
		s = sf.openSession();
		try{
			s.beginTransaction();
			s.saveOrUpdate(membro);
			s.getTransaction().commit();
		}catch(Exception e){
			// vsf
		}
		
	}

e este é o objeto a ser atualizado no banco

Porém ao invés de fazer update ele faz insert e da um erro por ter um campo unique

Hibernate: 
    insert 
    into
        sige.PessoaFisicaLocal
        (bairro, cep, cidade_idCidade, complemento, email, numero, rua) 
    values
        (?, ?, ?, ?, ?, ?, ?)
Hibernate: 
    insert 
    into
        sige.TelefonePessoa
        (telefoneCelular, telefoneComercial, telefoneResidencial) 
    values
        (?, ?, ?)
Hibernate: 
    insert 
    into
        sige.PessoaFisica
        (cpf, dataNascimento, idPessoaFisicaLocal, estadoCivil, nomeCompleto, rg, sexo, idPessoaTelefone) 
    values
        (?, ?, ?, ?, ?, ?, ?, ?)
WARN   - {2013-12-31 10:53:09,278} [AWT-EventQueue-0] org.hibernate.engine.jdbc.spi.SqlExceptionHelper(logExceptions:143) - SQL Error: 1062, SQLState: 23000
 ERROR  - {2013-12-31 10:53:09,279} [AWT-EventQueue-0] org.hibernate.engine.jdbc.spi.SqlExceptionHelper(logExceptions:144) - Duplicate entry '000.000.000-00' for key 'cpf'

ja tente saveOrUpdate(object), merge(object) e persist(object) e nenhuma da…

Ah, e em meu xml está configurado como update

<hibernate-configuration>
 <session-factory>
  <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
  <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/sige</property>
  <property name="hibernate.connection.username">root</property>
  <property name="hibernate.connection.password"></property>
  <property name="hibernate.default_schema">sige</property>
  <property name="dialect">org.hibernate.dialect.MySQLDialect</property>  
  <property name="hibernate.hbm2ddl.auto">update</property> 
  <property name="hibernate.show_sql">true</property>  
  <property name="hibernate.format_sql">true</property>  
  <property name="hibernate.query.substitutions">true 1, false 0</property>
  <mapping class="br.com.caioaraujo.sige.model.mapping.Usuario"/>
  <mapping class="br.com.caioaraujo.sige.model.mapping.UsuarioPerfilAcesso"/>
  <mapping class="br.com.caioaraujo.sige.model.mapping.Estado"/>
  <mapping class="br.com.caioaraujo.sige.model.mapping.Pais"/>
  <mapping class="br.com.caioaraujo.sige.model.mapping.Cidade"/>
  <mapping class="br.com.caioaraujo.sige.model.mapping.MembroDesligamento"/>
  <mapping class="br.com.caioaraujo.sige.model.mapping.MembroHistorico"/>
  <mapping class="br.com.caioaraujo.sige.model.mapping.TelefonePessoa"/>
  <mapping class="br.com.caioaraujo.sige.model.mapping.PessoaFisicaLocal"/>
  <mapping class="br.com.caioaraujo.sige.model.mapping.PessoaFisica"/>
  <mapping class="br.com.caioaraujo.sige.model.mapping.Membro"/>
 </session-factory>
</hibernate-configuration>

[i]O campo relativo ao cpf é unico, então é só passar um cpf valido :smiley:

E como vc n settou nenhum idMembro ao objeto, o hibernate gera um novo id para inserir, mas não consegue por que esse cpf já esta em uso.

Boa sorte ae[/i]

O Campo CPF esta correto pois é um update, e como disse no escopo esta indo o id do membro, porem o hibernate nao faz update!

Então usa o método update e vê qual a exceção

Você já deve ter inserido o valor ‘000.000.000-00’ em algum registro na tabela. O unique não vai permitir inseri-lo novamente. Nem o valor null pode ser duplicado no unique simples. Veja se é isto.