Rollback to persist entity with Hibernate

Asked

Viewed 88 times

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 an entity Client:

@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 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 register.save of 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 cliente_id, but I also need to save the data in the customer table. Where am I going wrong?

  • Try putting the newof the objects to be persisted only after the commit of the transaction.

No answers

Browser other questions tagged

You are not signed in. Login or sign up in order to post.