Gravar mestre e detalhe

Colegas,

Tenho um caso de uso onde o cliente liga para um atendente e esse preenche um formulario com dados do cliente e a reclamação.
Se o cliente não é cadastrado, cadastra-se o cliente e a reclamação.
Caso contrário (o cliente é cadastrado) cadastra-se apenas a reclamação. Para isso fiz o método abaixo que lança a exception quando o cliente não existe.
Onde estou errando, ou melhor, como vc soluciona casos como esse?

Muito obrigado,

Marques

org.hibernate.PropertyValueException: not-null property references a null or transient value: br.com.fit.entity.Reclamacao.cliente javax.faces.el.EvaluationException: org.hibernate.PropertyValueException: not-null property references a null or transient value: br.com.fit.entity.Reclamacao.cliente

[code]
public void adicionarReclamacao(Cliente cliente, Reclamacao reclamacao) {

	if (cliente.getId() == null) {
		createCliente(cliente);
	}
	
	create(reclamacao);
}[/code]

if (cliente.getId() == null) { createCliente(cliente); }

Note que você está tentando pegar o getID do cliente…
Mas se o cliente for nulo ele vai dar erro…
Então você só tira o GetID()

if (cliente == null) { createCliente(cliente); }

O que faz esse createCliente(cliente) ?

O caso é que se vc não usar CASCADE, vc deve salvar o Cliente antes de salvar Reclamacao.

Pela mensagem de erro, o seu objeto Reclamacao faz referencia a um objeto cliente, porém o cliente que está setado nele não existe no banco ainda ou não foi carregado com o ID do banco!

Verifique se, na hora de gravar o objeto reclamacao, o objeto cliente que ele faz referência está completo, com ID.