Ver Mensaje Individual
  #7 (permalink)  
Antiguo 20/04/2017, 21:00
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

Hey FuzzyLog depurando el sistema ahora no muestra elementos nulos en la clase Venta pero me da el mismo error, estoy comenzando a pensar que el problema está en la clase Venta o VentaKey (clase que uso para la relación N a N)

Código Java:
Ver original
  1. package app.model.entity;
  2. import java.io.Serializable;
  3. import java.util.List;
  4. import javax.persistence.*;
  5. @Table(name = "ventas")
  6. public class Venta implements Serializable
  7. {
  8.     @EmbeddedId
  9.     private VentaKey key;
  10.     @JoinColumns({
  11.         @JoinColumn(name = "SuId",referencedColumnName = "suId"),
  12.     })
  13.     @ManyToOne(cascade = CascadeType.ALL)
  14.     private Subasta subasta;
  15.     @ManyToOne(cascade = CascadeType.ALL)
  16.     @JoinColumn(name = "estId")
  17.     private Estado obje;
  18.     @OneToMany(cascade = CascadeType.ALL, mappedBy = "venta")    
  19.     private List<Registro>registros;
  20.     public Subasta getSubasta() {
  21.         return subasta;
  22.     }
  23.     public void setSubasta(Subasta subasta) {
  24.         this.subasta = subasta;
  25.     }
  26.     public VentaKey getKey() {
  27.         return key;
  28.     }
  29.     public void setKey(VentaKey key) {
  30.         this.key = key;
  31.     }    
  32.     public Estado getObje() {
  33.         return obje;
  34.     }
  35.     public void setObje(Estado obje) {
  36.         this.obje = obje;
  37.     }
  38.     public List<Registro> getRegistros() {
  39.         return registros;
  40.     }
  41.     public void setRegistros(List<Registro> registros) {
  42.         this.registros = registros;
  43.     }    
  44.     public Venta() { }        
  45.     public Venta(Subasta xobjs, Artefacto xobja, Estado obje) {
  46.         this.key = new VentaKey(xobjs,xobja);
  47.         this.subasta = xobjs;
  48.         this.obje = obje;
  49.     }    
  50.     @Override
  51.     public boolean equals(Object obj) {
  52.         if(obj instanceof Venta){
  53.             Venta v  =(Venta)obj;
  54.             return v.key.getObja() == this.key.getObja() && v.obje.equals(this.obje);
  55.         } else {
  56.             return false;
  57.         }
  58.     }
  59.     @Override
  60.     public int hashCode() {
  61.         int hash = 17;
  62.         hash = 31 * hash + this.key.getObja().hashCode();
  63.         hash = 31 * hash + this.obje.hashCode();
  64.         return hash;
  65.     }
  66.     @Override
  67.     public String toString() {
  68.         return this.key.getObja().getNombre() + " - estado: " + this.obje.getNombre();
  69.     }  
  70. }

Código Java:
Ver original
  1. package app.model.entity;
  2. import java.io.Serializable;
  3. import javax.persistence.*;
  4. @Embeddable
  5. public class VentaKey implements Serializable
  6. {
  7.     @ManyToOne(cascade = CascadeType.ALL)
  8.     @JoinColumn(name = "suId")
  9.     private Subasta objs;
  10.     @ManyToOne(cascade = CascadeType.ALL)
  11.     @JoinColumn(name = "artId")
  12.     private Artefacto obja;
  13.     public Subasta getObjs(){
  14.         return objs;
  15.     }
  16.     public void setObjs(Subasta objs) {
  17.         this.objs = objs;
  18.     }
  19.     public Artefacto getObja() {
  20.         return obja;
  21.     }    
  22.     public void setObja(Artefacto obja) {
  23.         this.obja = obja;
  24.     }    
  25.     public VentaKey(){}
  26.     public VentaKey(Subasta xobjs, Artefacto xobja) {
  27.         this.objs = xobjs;
  28.         this.obja = xobja;
  29.     }
  30.     @Override
  31.     public boolean equals(Object obj){
  32.         if(obj instanceof VentaKey){
  33.             VentaKey id =(VentaKey)obj;
  34.             return id.objs.equals(this.objs) && id.obja.equals(this.obja);
  35.         } else {
  36.             return false;
  37.         }
  38.     }
  39.     @Override
  40.     public int hashCode(){
  41.         int hash = 17;
  42.         hash = 31 * hash + this.objs.hashCode();
  43.         hash = 31 * hash + this.obja.hashCode();
  44.         return hash;
  45.     }
  46. }

Por otro lado hice lo que me dijiste quedandome el formulario así:

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(sub.getId());
  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.setSubasta(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.     }

Así tengo la parte de ediciones de las entidades:

Código Java:
Ver original
  1. public void edit(T entity) throws Exception {
  2.         if(this.checkUpdate(entity)){
  3.             ss.beginTransaction();
  4.             ss.merge(entity);
  5.             ss.getTransaction().commit();
  6.         }
  7.     }

Espero sus respuestas y saludos.