Item Duplicado Hibernate

Java

06/05/2016

Boa tarde estou com o seguinte problema ao da um merge em um objeto no qual possui uma lista esse objeto está salvado o item anterior duplicado exemplo

tenho a seguinte estrutura :

@Entity
@Table(name = "COMPRA_PEDIDO")
public class CompraPedido implements Serializable {

    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "ID")
    private Integer id;
    @Temporal(TemporalType.DATE)
    @Column(name = "DATA_PEDIDO")
    private Date dataPedido;
    @Temporal(TemporalType.DATE)
    @Column(name = "DATA_PREVISTA_ENTREGA")
    private Date dataPrevistaEntrega;
    @Temporal(TemporalType.DATE)
    @Column(name = "DATA_PREVISAO_PAGAMENTO")
    private Date dataPrevisaoPagamento;
    @Column(name = "LOCAL_ENTREGA")
    private String localEntrega;
    @Column(name = "LOCAL_COBRANCA")
    private String localCobranca;
    @Column(name = "CONTATO")
    private String contato;
    @Column(name = "VALOR_SUBTOTAL")
    private BigDecimal valorSubtotal;
    @Column(name = "TAXA_DESCONTO")
    private BigDecimal taxaDesconto;
    @Column(name = "VALOR_DESCONTO")
    private BigDecimal valorDesconto;
    @Column(name = "VALOR_TOTAL_PEDIDO")
    private BigDecimal valorTotalPedido;
    @Column(name = "TIPO_FRETE")
    private String tipoFrete;
    @Column(name = "FORMA_PAGAMENTO")
    private String formaPagamento;
    @Column(name = "BASE_CALCULO_ICMS")
    private BigDecimal baseCalculoIcms;
    @Column(name = "VALOR_ICMS")
    private BigDecimal valorIcms;
    @Column(name = "BASE_CALCULO_ICMS_ST")
    private BigDecimal baseCalculoIcmsSt;
    @Column(name = "VALOR_ICMS_ST")
    private BigDecimal valorIcmsSt;
    @Column(name = "VALOR_TOTAL_PRODUTOS")
    private BigDecimal valorTotalProdutos;
    @Column(name = "VALOR_FRETE")
    private BigDecimal valorFrete;
    @Column(name = "VALOR_SEGURO")
    private BigDecimal valorSeguro;
    @Column(name = "VALOR_OUTRAS_DESPESAS")
    private BigDecimal valorOutrasDespesas;
    @Column(name = "VALOR_IPI")
    private BigDecimal valorIpi;
    @Column(name = "VALOR_TOTAL_NF")
    private BigDecimal valorTotalNf;
    @Column(name = "QUANTIDADE_PARCELAS")
    private Integer quantidadeParcelas;
    @Column(name = "DIAS_PRIMEIRO_VENCIMENTO")
    private Integer diasPrimeiroVencimento;
    @Column(name = "DIAS_INTERVALO")
    private Integer diasIntervalo;
    @JoinColumn(name = "ID_COMPRA_TIPO_PEDIDO", referencedColumnName = "ID")
    @ManyToOne(optional = false)
    private CompraTipoPedido compraTipoPedido;
    @JoinColumn(name = "ID_FORNECEDOR", referencedColumnName = "ID")
    @ManyToOne(optional = false)
    private Fornecedor fornecedor;
    @OneToMany(fetch = FetchType.LAZY, mappedBy = "compraPedido", cascade = CascadeType.ALL, orphanRemoval = true)
    private Set<CompraPedidoDetalhe> listaCompraPedidoDetalhe;
    
     get e set omitidos


      @Override
    public int hashCode() {
        int hash = 3;
        hash = 79 * 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 CompraPedido other = (CompraPedido) obj;
        if (!Objects.equals(this.id, other.id)) {
            return false;
        }
        return true;
    }
}



@Entity
@Table(name = "COMPRA_PEDIDO_DETALHE")
public class CompraPedidoDetalhe implements Serializable {

    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "ID")
    private Integer id;
    @Column(name = "QUANTIDADE")
    private BigDecimal quantidade;
    @Column(name = "VALOR_UNITARIO")
    private BigDecimal valorUnitario;
    @Column(name = "VALOR_SUBTOTAL")
    private BigDecimal valorSubtotal;
    @Column(name = "TAXA_DESCONTO")
    private BigDecimal taxaDesconto;
    @Column(name = "VALOR_DESCONTO")
    private BigDecimal valorDesconto;
    @Column(name = "VALOR_TOTAL")
    private BigDecimal valorTotal;
    @Column(name = "CST_CSOSN")
    private String cstCsosn;
    @Column(name = "CFOP")
    private Integer cfop;
    @Column(name = "BASE_CALCULO_ICMS")
    private BigDecimal baseCalculoIcms;
    @Column(name = "VALOR_ICMS")
    private BigDecimal valorIcms;
    @Column(name = "VALOR_IPI")
    private BigDecimal valorIpi;
    @Column(name = "ALIQUOTA_ICMS")
    private BigDecimal aliquotaIcms;
    @Column(name = "ALIQUOTA_IPI")
    private BigDecimal aliquotaIpi;
    @JoinColumn(name = "ID_COMPRA_PEDIDO", referencedColumnName = "ID")
    @ManyToOne(optional = false)
    private CompraPedido compraPedido;
    @JoinColumn(name = "ID_PRODUTO", referencedColumnName = "ID")
    @ManyToOne(optional = false)
    private Produto produto;

   get e set omitidos

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

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


tenho produto 1 produto 2 e produto 3

quando vou salvar o produto 1 ocorre tudo normalmente, porem quando eu vou incluir o produto 2 ele acaba salvando novamente o produto 1 e o produto 2, e quando vou salvar o produto 3 ele salvar o produto 2 e o produto 3, isso falando a nível de banco de dados pois na lista cotem apenas os 3 itens.
John Lima

John Lima

Curtidas 0
POSTAR