Ver Mensaje Individual
  #1 (permalink)  
Antiguo 01/07/2010, 06:49
Avatar de FiruzzZ
FiruzzZ
 
Fecha de Ingreso: diciembre-2007
Ubicación: en casa
Mensajes: 470
Antigüedad: 16 años, 10 meses
Puntos: 41
Exclamación persistiendo una Collection (List)

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 original
  1. EntityManager em = null;
  2.       try {
  3.          em = getEntityManager();
  4.          em.getTransaction().begin();
  5.          List<DetallesVenta> attachedDetallesVentaList = new ArrayList<DetallesVenta>();
  6.          for (DetallesVenta detallesVentaListDetallesVentaToAttach : facturaVenta.getDetallesVentaList()) {
  7.             detallesVentaListDetallesVentaToAttach = em.merge(detallesVentaListDetallesVentaToAttach);
  8.             attachedDetallesVentaList.add(detallesVentaListDetallesVentaToAttach);
  9.          }
  10.          facturaVenta.setDetallesVentaList(attachedDetallesVentaList);
  11.          em.persist(facturaVenta);
  12.          for (DetallesVenta detallesVentaListDetallesVenta : facturaVenta.getDetallesVentaList()) {
  13.             FacturaVenta oldFacturaOfDetallesVentaListDetallesVenta = detallesVentaListDetallesVenta.getFactura();
  14.             detallesVentaListDetallesVenta.setFactura(facturaVenta);
  15.             detallesVentaListDetallesVenta = em.merge(detallesVentaListDetallesVenta);
  16.             if (oldFacturaOfDetallesVentaListDetallesVenta != null) {
  17.                oldFacturaOfDetallesVentaListDetallesVenta.getDetallesVentaList().remove(detallesVentaListDetallesVenta);
  18.                oldFacturaOfDetallesVentaListDetallesVenta = em.merge(oldFacturaOfDetallesVentaListDetallesVenta);
  19.             }
  20.          }
  21.          em.getTransaction().commit();

Última edición por FiruzzZ; 01/07/2010 a las 07:58 Razón: mejora de dicción..