JSF and JPA with EclipseLink: Inserting element twice in the database

1

I'm working on software and I'm having a headache to insert some related objects. It is inserting this object twice and the error is not visible. To see the whole project, follow the link from github: Complete Project .

The classes that are giving this problem are the incoming and outgoing transactions. But we are going to the entrance, then in the exit I turn:

My view: new-entry.xhtml

 <h:form>
   <div class="clearfix m-t-1">
     <h:outputLabel for="quantidade" value="Quantidade" rendered="true"/>
     <h:inputText value="#{entradaController.entrada.quantidade}" id="quantidade" class="form-control" pt:placeholder="Digite a quantidade"/>
   </div>

 <div class="clearfix m-t-1">
   <h:outputLabel for="fornecedor" value="Fornecedor"/>
   <h:selectOneMenu id="fornecedor" value="#{entradaController.idFornecedorEntrada}" class="form-control custom-select">
     <f:selectItem itemLabel="Selecionar o Fornecedor" itemValue="#{null}" />
     <f:selectItems value="#{entradaController.fornecedores}" var="fornecedor" itemLabel="#{fornecedor.nome}" itemValue="#{fornecedor.id}" />
   </h:selectOneMenu>
 </div>

 <div class="clearfix m-t-1">
   <h:outputLabel for="produto" value="Produto"/>
   <h:selectOneMenu id="produto" value="#{entradaController.idProdutoEntrada}" class="form-control custom-select">
     <f:selectItem itemLabel="Selecione o produto" itemValue="#{null}" />
     <f:selectItems value="#{entradaController.produtos}" var="produto" itemLabel="#{produto.nome}" itemValue="#{produto.id}" />
   </h:selectOneMenu>
 </div>

 <div class="clearfix m-t-1">
   <h:outputLabel for="almoxarifado" value="Almoxarifado"/>
   <h:selectOneMenu id="almoxarifado" value="#{entradaController.idAlmoxarifadoEntrada}" class="form-control custom-select">
     <f:selectItem itemLabel="Selecione o Almoxarifado" itemValue="#{null}" />
     <f:selectItems value="#{entradaController.almoxarifados}" var="amoxarifado" itemLabel="#{amoxarifado.cidade} / #{amoxarifado.estado}" itemValue="#{amoxarifado.id}" />
   </h:selectOneMenu>
 </div>


 <div class="clearfix m-t-1">
   <h:commandButton action="#{entradaController.gravar()}" value="Gravar Entrada" class="btn btn-success form-control" />
 </div>

 </h:form>

Just below, my control: entryControlle .java

public String gravar() {

        this.fornecedorExterno = this.fornecedorExternoDAO.buscaPorId(idFornecedorEntrada);
        this.entrada.setFornecedorExterno(fornecedorExterno);

        this.almoxarifado = this.almoxarifadoDAO.buscaPorId(idAlmoxarifadoEntrada);
        this.produto = this.produtoDAO.buscaPorId(idProdutoEntrada);
        this.produtoAlmoxarifado = produtoAlmoxarifadoDAO.busca(
                this.idAlmoxarifadoEntrada,
                this.idProdutoEntrada
        );
        this.produtoAlmoxarifado.setAlmoxarifado(this.almoxarifado);
        this.produtoAlmoxarifado.setProduto(this.produto);
        this.produtoAlmoxarifado.setQuantidade(0);
        this.produtoAlmoxarifadoDAO.add(this.produtoAlmoxarifado);

        produtoAlmoxarifado.addEntrada(entrada);
        produtoAlmoxarifadoDAO.update(produtoAlmoxarifado);
        entradaDAO.add(entrada);

        this.entradas = this.entradaDAO.getList();

        return "entrada?faces-redirect=true";
}

My input class: Complete .java

package br.com.loogix.model;

import java.io.Serializable;
import java.time.LocalDate;
import java.util.Objects;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

/**
 *
 * @author thiago
 */
@Entity
@Table (name = "entrada")
public class Entrada implements Serializable {

    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Temporal(TemporalType.TIMESTAMP)
    private LocalDate data;
    private Integer quantidade;

    @ManyToOne
    @JoinColumn (name = "id_fornecedor")
    private FornecedorExterno fornecedorExterno;

    @ManyToOne
    @JoinColumn (name = "id_produto_almoxarifado")
    private ProdutoAlmoxarifado produtoAlmoxarifado;

    public LocalDate getData() {
        return data;
    }

    public void setData(LocalDate data) {
        this.data = data;
    }

    public Integer getQuantidade() {
        return quantidade;
    }

    public String getDataFormatada() {
        return this.data.toString();
    }

    public void setQuantidade(Integer quantidade) {
        this.quantidade = quantidade;
    }

    public FornecedorExterno getFornecedorExterno() {
        return fornecedorExterno;
    }

    public void setFornecedorExterno(FornecedorExterno fornecedorExterno) {
        this.fornecedorExterno = fornecedorExterno;
    }

    public ProdutoAlmoxarifado getProdutoAlmoxarifado() {
        return produtoAlmoxarifado;
    }

    public void setProdutoAlmoxarifado(ProdutoAlmoxarifado produtoAlmoxarifado) {
        this.produtoAlmoxarifado = produtoAlmoxarifado;
    }

    public Long getId() {
        return id;
    }

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

    @Override
    public String toString() {
        return "Entrada{" + "id=" + id + ", data=" + data + ", quantidade=" + quantidade + ", fornecedorExterno=" + fornecedorExterno + '}';
    }

    @Override
    public int hashCode() {
        int hash = 7;
        hash = 97 * hash + Objects.hashCode(this.id);
        return hash;
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final Entrada other = (Entrada) obj;
        if (!Objects.equals(this.id, other.id)) {
            return false;
        }
        return true;
    }




}

My class inputData.java :

package br.com.loogix.dao;

import br.com.loogix.model.Entrada;
import java.io.Serializable;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import javax.persistence.TypedQuery;

@Stateless
public class EntradaDAO implements Serializable {

    private static final long serialVersionUID = 1L;

    private GenericDAO<Entrada> dao;

    @PersistenceContext
    EntityManager em;

    @PostConstruct
    public void init() {
        this.dao = new GenericDAO<Entrada>(this.em);
    }

    public void add(Entrada entrada) {
       this.dao.add(entrada);
    }

    public void update(Entrada entrada) {
        this.dao.update(entrada);
    }

    public void delete(Entrada entrada) {
        entrada = this.em.merge(entrada);
        this.dao.delete(entrada);
    }

    public List<Entrada> getList() {
        Query q = em.createQuery("select e from Entrada e");
        return q.getResultList();
    }

    public Long getSize() {
        TypedQuery<Long> q = em.createQuery("select count(e.id) from Entrada e", Long.class);
        return q.getSingleResult();
    }

}

The input classController.java needs other classes to assist the write method in insertion and relationship. To view, follow the complete project at the beginning of this post.

    
asked by anonymous 03.12.2017 / 15:24

0 answers