Na hora de atualizar os dados ou na hora de deletar dá esse erro: [color=red] org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: [br.com.vetta.entidades.Pessoa#2]
[/color]
minha entidade Pessoa:
@Entity
public class Pessoa {
@Id
@GeneratedValue
@Column(name = "id_pessoa")
private int idPessoa;
@NotEmpty
private String nome;
private String sobenome;
@NotEmpty
private String cpf;
private int idade;
private int telefone;
@Email
private String email;
@NotEmpty
private String usuario;
@NotEmpty
private String senha;
public int getIdPessoa() {
return idPessoa;
}
public void setIdPessoa(int idPessoa) {
this.idPessoa = idPessoa;
//mais getters e setters aqui...
Você não atribuiu nenhum strategy ou generator à anotação @GeneratedValue o que poderá lhe causar problemas (não sei qual o comportamento assumido pelo hibernate neste caso).
Entretanto, com toda e absoluta certeza o seu software está violando uma constraint do banco que garante uma informação única para cada registro, dada a mensagem, aparentemente isto ocorre pois você está tentando inserir um registro no banco com um id já existente.
Lhe pergunto, você está atribuindo este ID manualmente? A operação que o seu EntityManager está tentando executar que gera tal exceção é uma ação de inserção mesmo ou está tentando atualizar algo?
Dica: Caso seu banco use o conceito de sequences você precisará de algo assim mais ou menos:
E caso esteja utilizando algo que garanta a linearidade dos identificados implicitamente como o auto_increment do MySQL:
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
ps: Estude a javadoc de GenerationType para verificar se AUTO satisfaz sua necessidade, algum dos enum’s contidos ali será o suficiente para resolver seu problema!
Eu estou usando o auto_increment, por default o @GeneratedValue usa o GenerationType.AUTO, por isso nao coloquei nada.(pelo menos meu professor falou isso!)
O problema acontece na hora de alterar ou excluir algum dado da este erro.
Eu acho que não tem haver com nada relacionado com infra-estrutura e sim que a operação que você está executando ao invés de executar um update (por perceber que a entidade já existe no banco) está executando um insert.
Qual operação(método) você está usando e de qual tecnologia? JPA ou Hibernate direto?
[quote=jayrmotta]Eu acho que não tem haver com nada relacionado com infra-estrutura e sim que a operação que você está executando ao invés de executar um update (por perceber que a entidade já existe no banco) está executando um insert.
Qual operação(método) você está usando e de qual tecnologia? JPA ou Hibernate direto?[/quote]
Estou usando Hibernate 3.2 e utilizo o metodo session.update() para fazer a alteraçao!
Meu metodo para alterar