[RESOLVIDO]Salva apenas 1 linha da minha lista

Pessoal, Preencho minha lista por exemplo com dois itens, (itens.size = 2), porem ele grava apenas uma linha desta lista.

Obs. No exemplo acima, ele passa DUAS vezes , no for abaixo


    @Interceptors({GerenciaTransacaoInterceptor.class})
    public void salvaritens(int codguia, List<Itensguia> itens) {
        try {        
                  Cadguia guia = new Cadguia();
   
                  Itensguia itensguia = new Itensguia(); 
                  
                  ItensguiaPK itensguiaPk = new ItensguiaPK();
                
                  
                for (Itensguia qtdmes : itens) {
                     guia.setCodguia(codguia);                    
                     itensguiaPk.setCodguia(codguia);
                     itensguiaPk.setId(qtdmes.getItensguiaPK().getId());
                      
                     
                     itensguia.setItensguiaPK(itensguiaPk);
                     itensguia.setCadguia(guia);
                     itensguia.setTabproc(qtdmes.getTabproc());                     
                     emAux.persist(itensguia);
                }

                    
                    
        } catch (Exception ex) {
            System.err.print(ex);
        }
                    
    }

Olá Evandro como vai,
Cara, poste a classe Itensguia pra dar uma olhadinha :slight_smile:

Por acaso está salvando apenas a última ?

Blz, Alessandro, segue abaixo as entidades:

public class Itensguia implements Serializable {
    private static final long serialVersionUID = 1L;
    @EmbeddedId
    protected ItensguiaPK itensguiaPK;
    @Column(name = "qtdsol")
    private Integer qtdsol;
    @Column(name = "qtdaut")
    private Integer qtdaut;
    // @Max(value=?)  @Min(value=?)//if you know range of your decimal fields consider using these annotations to enforce field validation
    @Column(name = "ch")
    private BigDecimal ch;
    @Column(name = "filme_m2")
    private BigDecimal filmeM2;
    @Column(name = "status")
    private Character status;
    @Column(name = "codsitubloq")
    private Integer codsitubloq;
    @Size(max = 100)
    @Column(name = "mensagem")
    private String mensagem;
    @Size(max = 1)
    @Column(name = "auditoria")
    private String auditoria;
    @Size(max = 1)
    @Column(name = "statusaud")
    private String statusaud;
    @Column(name = "dataaud")
    @Temporal(TemporalType.DATE)
    private Date dataaud;
    @Size(max = 200)
    @Column(name = "obsaud")
    private String obsaud;
    @Column(name = "valfator")
    private BigDecimal valfator;
    @JoinColumns({
        @JoinColumn(name = "codtab", referencedColumnName = "codtab"),
        @JoinColumn(name = "codproc", referencedColumnName = "codproc"),
        @JoinColumn(name = "seqproc", referencedColumnName = "seqproc")})
    @ManyToOne
    private Tabproc tabproc;
    @JoinColumn(name = "codguia", referencedColumnName = "codguia", nullable = false, insertable = false, updatable = false)
    @ManyToOne(optional = false)
    private Cadguia cadguia;
**************************

@Embeddable
public class ItensguiaPK implements Serializable {
    @Basic(optional = false)
    @NotNull
    @Column(name = "codguia")
    private int codguia;
    @Basic(optional = false)
    @Column(name = "id")
    private int id;


Coloque esses news dentro do for:

Itensguia itensguia = new Itensguia();                   
ItensguiaPK itensguiaPk = new ItensguiaPK();  

Caso contrário, você está criando um objeto só, e só alterando seus valores no set. E colocando várias e várias vezes a referência ao mesmo objeto para salvar.

Outra solução seria usar a declaração do for “qtdmes” para setar seu objeto ItensGuia.

E essa talvez seja até melhor…

Deu certo ViniGodoy, vlw.