El problema es el siguiente: el ORM (TopLink) NO respeta el orden de los elementos que están en la List.. (los items de la Factura, el DetalleFactura).
Es decir
item1 .......................cant..........precio....... subTotal
item2 .......................cant..........precio....... subTotal
item3 .......................cant..........precio....... subTotal
item4 .......................cant..........precio....... subTotal
cuando hago el proceso de persistir la Factura y su respetiva List<DetalleFactura>
me guarda en cualquier orden.. y siempre distinto
item4, item2, item1, item3
item3, item1, item4, item3
Obs: Todo es persistido, las PK, fk , los serial (Postgre), todo se crea correctamente, solo que me hace el PUTISIMO RANDOM!! al insertar los DetalleFactura..
Código C:
Ver originalEntityManager em = null;
try {
em = getEntityManager();
em.getTransaction().begin();
List<DetallesVenta> attachedDetallesVentaList = new ArrayList<DetallesVenta>();
for (DetallesVenta detallesVentaListDetallesVentaToAttach : facturaVenta.getDetallesVentaList()) {
detallesVentaListDetallesVentaToAttach = em.merge(detallesVentaListDetallesVentaToAttach);
attachedDetallesVentaList.add(detallesVentaListDetallesVentaToAttach);
}
facturaVenta.setDetallesVentaList(attachedDetallesVentaList);
em.persist(facturaVenta);
for (DetallesVenta detallesVentaListDetallesVenta : facturaVenta.getDetallesVentaList()) {
FacturaVenta oldFacturaOfDetallesVentaListDetallesVenta = detallesVentaListDetallesVenta.getFactura();
detallesVentaListDetallesVenta.setFactura(facturaVenta);
detallesVentaListDetallesVenta = em.merge(detallesVentaListDetallesVenta);
if (oldFacturaOfDetallesVentaListDetallesVenta != null) {
oldFacturaOfDetallesVentaListDetallesVenta.
getDetallesVentaList().
remove(detallesVentaListDetallesVenta
); oldFacturaOfDetallesVentaListDetallesVenta = em.merge(oldFacturaOfDetallesVentaListDetallesVenta);
}
}
em.getTransaction().commit();