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 
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.