Problema ao deletar um objeto - Removing a detached instance {Resolvido!}


//classe de domínio
@Entity
@Table(name = "CLIENTE")
@SequenceGenerator(name = "SEQ_ID_GEN_CLIENTE", sequenceName = "SEQ_ID_GEN_CLIENTE")
public class Cliente {
	
	@Id
	@GeneratedValue(strategy = GenerationType.AUTO, generator = "SEQ_ID_GEN_CLIENTE")
	private Long id;

	@Column(name = "NOME")
	@Length(min = 1, max = 255)
	@NotEmpty
	private String nome;

	@Column(name = "CPF", length = 15)
	@NotEmpty
	private String cpf;
	
	@OneToMany(cascade = CascadeType.ALL, mappedBy = "cliente")
	private List<CarroCliente> carros;

	@ManyToOne
	@JoinColumn(name = "ID_TIPO_CLIENTE_FK")
	private TipoCliente tipoCliente;
	
	@OneToMany(cascade = CascadeType.ALL,mappedBy="cliente")
	private List<Lavagem> lavagens;

	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public String getCpf() {
		return cpf;
	}

	public void setCpf(String cpf) {
		this.cpf = cpf;
	}

	public List<CarroCliente> getCarros() {
		return carros;
	}

	public void setCarros(List<CarroCliente> carros) {
		this.carros = carros;
	}

	public TipoCliente getTipoCliente() {
		return tipoCliente;
	}

	public void setTipoCliente(TipoCliente tipoCliente) {
		this.tipoCliente = tipoCliente;
	}
	
	public List<Lavagem> getLavagens() {
		return lavagens;
	}

	public void setLavagens(List<Lavagem> lavagens) {
		this.lavagens = lavagens;
	}
	
	@Override
	public boolean equals(Object obj){
		if( (obj instanceof Cliente) && ( ((Cliente)obj).getId().equals(this.id)) ){
			return true; 
		}else{
			return false; 
		}
	}

}




//imports
@Controller("clienteController")
public class ClienteController {

	private Cliente cliente;

	@Resource
	private ClienteService clienteService;

	@Resource
	private TipoClienteService tpclienteservice;

	private List<Cliente> clientes;

	private List<SelectItem> tipoclientes = new ArrayList<SelectItem>();

	public String deletar(){
		clienteService.findCliente(this.cliente.getId()); //estou recuperando o objeto do banco antes de deletar mas mesmo assim não obtive sucesso
		//Cliente cliente = this.clienteService.pesquisaClienteByCpf(this.cliente.getCpf());
		clienteService.deleteCliente(this.cliente);
		configCliente();
		return "formDeletarCliente";
	}
	//outros metodos e setters e getters 
}

estou usando JSF + Richfaces também

ja dei uma vasculhada sobre como remover mas não tive sucesso… e entendo mais ou menos o problema, mas como sou novato em tudo fica difícil saber como resolver.

isso acontece qdo vc tenta deletar um obj que está fora do contexto de persistencia.

vc pode facilitar este trabalho fazendo o método deleteCliente ja colocar o obj no contexto algo como:

public void deleteCliente(Cliente cliente) {
   cliente = this.findCliente(cliente.getId());
   //aqui seu cod de deleçao
}

espero ter ajudado

abrassssss

[quote=renanreismartins]isso acontece qdo vc tenta deletar um obj que está fora do contexto de persistencia.

vc pode facilitar este trabalho fazendo o método deleteCliente ja colocar o obj no contexto algo como:

public void deleteCliente(Cliente cliente) {
   cliente = this.findCliente(cliente.getId());
   //aqui seu cod de deleçao
}

espero ter ajudado

abrassssss[/quote]

Valeu cara, vou tentar aqui e posto o resultado…
eu ja tinha entendido sobre a questão de o hibernate está fechando a sessão e por isso o objeto fica fora do ciclo de persistência, estando no ciclo detached e sei que deveria recuperar este objeto para que ele volte a ficar no ciclo de persistência. A questão é… não sabia como fazer
mas curiosidade como vou fazer a chamada no meu jsf?

VALEUUUUUUUUUUUUUU! Consegui cara, como vc falou, alterei na minha camada de serviço para quando ir la no delete ele trazer o objeto como vc disse, funcionou tranquilo!!!

off
como coloco q o tópico foi resolvido?

que bom que conseguimos solucionar…

algumas pessoas fazem como vc, colocam “resolvido” no título do tópico, eu particularmente não faço nada eheheh

abrassss