Ver Mensaje Individual
  #11 (permalink)  
Antiguo 24/04/2017, 21:45
Avatar de detective_jd
detective_jd
 
Fecha de Ingreso: abril-2011
Ubicación: Salto
Mensajes: 437
Antigüedad: 13 años
Puntos: 6
Respuesta: Guardar OneToMany Hibernate

Hola Tipdar y FuzzyLog verán descubrí gran parte de mi problema y cómo resolverlo:

En la clase Subasta tenía que borrar el atributo subasta que estaba redundante y hacer lo que puse ahora

Código Java:
Ver original
  1. @OneToMany(mappedBy = "key.subasta",cascade = CascadeType.ALL)
  2.     private List<Venta>ventas = new ArrayList();

Pero ahora estoy en que cuando guardo la subasta está queda almacenada en la base de datos, pero cuando la edito con las ventas almacenadas me da este error, cuando guardo la subasta nueva:

abr 24, 2017 11:54:51 PM org.hibernate.internal.ExceptionMapperStandardImpl mapManagedFlushFailure
ERROR: HHH000346: Error during managed flush [A different object with the same identifier value was already associated with the session : [app.model.entity.Venta#app.model.entity.VentaKey@8 d078dc4]]

Cuando la edito más tarde no me da ese problema que raro ¿no?, pondré el código del botón aceptar

Código Java:
Ver original
  1. private void btnaceptarActionPerformed(java.awt.event.ActionEvent evt) {                                          
  2.         if(this.dtfecsubasta.getCalendar() == null || this.txtdirsubasta.getText().isEmpty() || this.txtsubsubasta.getText().isEmpty()){
  3.             Mensajes.MostrarAdvertencia("Ingrese los datos obligatorios (*)");
  4.         } else {
  5.             if(accion.equals("crear")){
  6.                 try {
  7.                     Direccion d = FacadeContr.getInstance().manDirecciones().findByX(this.txtdirsubasta.getText());
  8.                     Subastador s = FacadeContr.getInstance().manSubastadores().findByX(this.txtsubsubasta.getText());
  9.                     Subasta sub = new Subasta(Conversiones.CInt(this.txtnrosubasta.getText()), this.getDateTime(), d, s);
  10.                     FacadeContr.getInstance().manSubastas().add(sub);                
  11.                     Mensajes.MostrarConfirmacion("Subasta Creada");
  12.                     ventana.setTitle("Editar Subasta");
  13.                     accion = "editar";
  14.                     objs = FacadeContr.getInstance().manSubastas().findById(FacadeContr.getInstance().manSubastas().maxId()-1);
  15.                 } catch (Exception ex) {
  16.                     Mensajes.MostrarAdvertencia(ex.getMessage());
  17.                 }
  18.             } else {
  19.                 try {
  20.                     Direccion d = FacadeContr.getInstance().manDirecciones().findByX(this.txtdirsubasta.getText());
  21.                     Subastador s = FacadeContr.getInstance().manSubastadores().findByX(this.txtsubsubasta.getText());
  22.                     Subasta sub = new Subasta(Conversiones.CInt(this.txtnrosubasta.getText()), this.getDateTime(), d, s);
  23.                     sub.setVentas(objs.getVentas().toList());
  24.                     sub.getVentas().toList().forEach((v) -> {
  25.                         v.getKey().setObjs(sub);
  26.                     });
  27.                     FacadeContr.getInstance().manSubastas().edit(sub);                
  28.                     Mensajes.MostrarConfirmacion("Subasta Editada");
  29.                     btncancelarActionPerformed(evt);
  30.                 } catch (Exception ex) {
  31.                     Mensajes.MostrarAdvertencia(ex.getMessage());
  32.                 }
  33.             }            
  34.         }
  35.     }

Espero sus respuestas y Saludos.