Item Duplicado Hibernate
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 :
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.
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
Curtidas 0