Exception ao deletar: save the transient instance before merging:[RESOLVIDO]

1 resposta
E
EStou tendo dificuldade em deletar um objeto, estou recebendo esse erro:
object is an unsaved transient instance - save the transient instance before merging: br.com.Cidade

Estou removendo um objeto pessoa e tenho:

if (pessoa.getEnderecos() != null) {
List<Pessoaendereco> enderecos = new ArrayList<Pessoaendereco>();
enderecos = pessoa.getEnderecos();
for (Pessoaendereco pe : enderecos) {
session.delete(session.merge(pe));
}
...

Pessoa _pessoa = (Pessoa) session.merge(pessoa); 
session.delete(_pessoa); // exception aqui

}

entidades:

public class Pessoa {
    @OneToMany
	@JoinColumn(name="cdPessoa", insertable=false, updatable=false)	
	private List<Pessoaendereco> enderecos;
}


public class Pessoaendereco {
    @OneToOne
    @JoinColumn(name="cdCidade",insertable=false,updatable=false)
    private Cidade cidade;

}

public class Cidade{
    @OneToOne
    @JoinColumn(name="cdPais",insertable=false,updatable=false)
    private Pais pais;
}

já tentei salvar o objeto pessoa como diz na exception mas nada...

for (Pessoaendereco pe : enderecos) {
Cidade c = pe.getCidade();
session.saveOrUpdate(c);
session.merge(c);					
session.delete(session.merge(pe));
				}

1 Resposta

E

o problema era uma referência na classe pessoa para a classe cidade, e eu nao tinha visto.

//classe pessoa

  @OneToOne
    @JoinColumn(name="cdCidadenatural",insertable=false,updatable=false, nullable=true)
    private Cidade cidadenatural;//PROBLEMA ESTAVA AQUI
//classe pessoa endereco

 @ManyToOne
    @JoinColumn(name="cdCidade",insertable=false,updatable=false)
    private Cidade cidade;

Botei nullable true no mapeamendo e setei cidadenatural como null na hora de deletar e funcionou...

if (pessoa.getEnderecos() != null) {
				List<Pessoaendereco> enderecos = new ArrayList<Pessoaendereco>();
				enderecos = pessoa.getEnderecos();
				for (Pessoaendereco pe : enderecos) {
					session.delete(session.merge(pe));
				}
			}
			
			pessoa.setCidadenatural(null);
			Pessoa _pessoa = (Pessoa) session.merge(pessoa);
			session.delete(_pessoa);
			session.flush();
Criado 20 de dezembro de 2010
Ultima resposta 20 de dez. de 2010
Respostas 1
Participantes 1