Rollback while persisting entity with hibernate

1

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?

    
asked by anonymous 23.11.2017 / 21:08

0 answers