I have an entity Product:
@Entity
@Table(name = "produto")
public class Produto implements Serializable {
private static final long serialVersionUID = 1L;
private Long id;
private Cliente cliente;
private String nome;
private BigDecimal valor;
//getter e setter com anotacoes
}
and a Client entity:
@Entity
@Table(name = "cliente")
public class Cliente implements Serializable {
private static final long serialVersionUID = -195972743343153998L;
private Long id;
private String nome;
private String endereco;
//getter e setter com anotacoes
}
and in the bean I do:
@ManagedBean
@ViewScoped
public class CadastroProdutosBean implements Serializable {
private static final long serialVersionUID = 1L;
private Produto produto = new Produto();
private Cliente cliente = new Cliente();
private List<Cliente> clientes;
//metodo init
//nesse metodo recupero uma lista de cliente pra popular uma combo
public void prepararCadastro() {
EntityManager manager = JpaUtil.getEntityManager();
try {
ClientesRepository clientesRepository = new ClientesRepository(manager);
this.clientes = clientesRepository.listarTodos();
} finally {
manager.close();
}
}
//aqui de fato faço a persistencia
public void salvar() {
EntityManager manager = JpaUtil.getEntityManager();
EntityTransaction transaction = manager.getTransaction();
FacesContext context = FacesContext.getCurrentInstance();
try {
transaction.begin();
CadastroProdutos cadastroProdutos = new CadastroProdutos(new ProdutosRepository(manager));
cadastroProdutos.salvar(this.produto);
CadastroClientes cadastroClientes = new CadastroClientes(new ClientesRepository(manager));
//aqui cai na exception
cadastroClientes.salvar(this.cliente);
this.produto = new Produto();
this.cliente = new Cliente();
context.addMessage(null, new FacesMessage("Venda cadastrada com sucesso."));
transaction.commit();
} catch (Exception e) {
transaction.rollback();
FacesMessage mensagem = new FacesMessage(e.getMessage());
mensagem.setSeverity(FacesMessage.SEVERITY_ERROR);
context.addMessage(null, mensagem);
} finally {
manager.close();
}
}
Then in the customer database, you can save the rollback in the transaction with the error:
org.hibernate.PropertyValueException: not-null property references a null or transient value : com.br.modelos.Cliente.nome
When I try to save only the product, it normally saves the product data including the client_id, but I also need to save the data in the client table. Where am I going wrong?