Fala pessoal,
Estou enfrentando o seguinte problema: Tenha a Entidade Venda que tem vários itens (Produtos, parcelas, serviços, nfe's).. Quando eu salvo, tudo beleza, porém na edição recebo o erro de DETACHED ENTITY PASSED TO PERSIST... em testes identifiquei que o problema está nas minhas PARCELAS que tem chave composta (VENDA + CODIGO)...
Alguma sugestão doque pode ser ?
Entidade Venda:
@Entity
@Table(name = "tb_venda")
public class Venda implements Serializable{
@Id
@SequenceGenerator(name="tb_venda_gen", sequenceName="tb_venda_id_venda_seq",allocationSize=1)
@GeneratedValue(strategy = GenerationType.SEQUENCE,generator="tb_venda_gen")
@Column(name = "id_venda")
private Long codigo;
@NotNull(message = "Tipo de venda é obrigatório")
@Enumerated(EnumType.STRING)
@Column(name = "tipo_venda")
private TipoVenda tipoVenda = TipoVenda.VENDA;
@Column(name = "data_criacao")
private LocalDateTime dataCriacao;
@Column(name = "valor_frete")
private BigDecimal valorFrete = BigDecimal.ZERO;
@Column(name = "valor_desconto")
private BigDecimal valorDesconto = BigDecimal.ZERO;
@ManyToOne
@JoinColumn(name = "id_pessoa")
private Pessoa pessoa;
@ManyToOne
@JoinColumn(name = "id_usuario")
private Usuario usuario;
@ManyToOne
@JoinColumn(name = "id_agenda")
private Agenda agenda;
@Enumerated(EnumType.STRING)
private StatusVenda status = StatusVenda.ORCAMENTO;
@OneToMany(mappedBy = "venda", cascade = CascadeType.ALL, orphanRemoval = true)
@ElementCollection(fetch = FetchType.LAZY)
@MapKeyColumn(name = "id_produto")
private Map<Long, ItemVenda> itens = new HashMap<>();
@OneToMany(mappedBy = "venda", cascade = CascadeType.ALL)
@ElementCollection(fetch = FetchType.LAZY)
@MapKeyColumn(name = "id_parcela")
private Map<Integer, Parcela> parcelas = new HashMap<>();
@OneToMany(mappedBy = "venda", cascade = CascadeType.ALL, orphanRemoval = true)
@ElementCollection(fetch = FetchType.LAZY)
@MapKeyColumn(name = "id_tipo_atendimento")
private Map<Integer, ItemAtendimento> itensAtendimento = new HashMap<>();
@JsonIgnore
@OneToMany(mappedBy = "venda", cascade = CascadeType.ALL, orphanRemoval = true)
@ElementCollection(fetch = FetchType.LAZY)
@MapKeyColumn(name = "id_nfe")
private Map<Long, NFeInfo> nfeInfos = new HashMap<>();
@Transient
private String uuid;
//GETERS & SETERS
}
Entidade Parcela:
@Entity
@Table(name = "tb_parcela_venda")
@IdClass(Parcela.ParcelaId.class)
public class Parcela implements Serializable {
@Id
@ManyToOne
@JoinColumn(name = "id_venda")
private Venda venda;
@Id
@Column(name = "id_parcela")
private Integer codigo;
@Column(name = "data_vencimento")
private LocalDate dataVencimento;
@Column(name="data_pagamento")
private LocalDate dataPagamento;
private BigDecimal valor;
@Column(name="valor_pago")
private BigDecimal valorPago = BigDecimal.ZERO;
@NotNull(message = "Moeda de pagamento é obrigatório")
@ManyToOne
@JoinColumn(name="id_moeda")
private MoedaPagamento moedaPagamento;
@ManyToOne
@JoinColumn(name = "id_usuario_ultima_modificacao")
private Usuario usuarioUltimaModificacao;
@Column(name = "data_ultima_modificacao")
private LocalDateTime dataUltimaModificacao;
// GETERS / SETERS / EQUAL HASHCODE
public static class ParcelaId implements Serializable {
private Long venda;
private Integer codigo;
// GETERS / SETERS / EQUAL HASHCODE
}
}
Vlww