Ver Mensaje Individual
  #17 (permalink)  
Antiguo 03/05/2017, 21:34
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 Fuzzylog Intenté lo que me djisiste y me dio este error:

ERROR: HHH000346: Error during managed flush [org.hibernate.HibernateException: identifier of an instance of app.model.entity.Venta was altered from app.model.entity.VentaKey@476435fd to null]

¿La clase del composite key no será el problema?

Código Java:
Ver original
  1. package app.model.entity;
  2. import app.contr.util.Conversiones;
  3. import java.io.Serializable;
  4. import java.util.*;
  5. import javax.persistence.*;
  6. import up.max.proyectpages.structs.PagesList;
  7. @Table(name = "subastas")
  8. ..............
  9. public class Subasta implements Serializable
  10. {
  11.     .................
  12.     @OneToMany(mappedBy = "key.subasta",cascade = CascadeType.MERGE)  
  13.     private List<Venta>ventas = new ArrayList();
  14.     .................
  15. }

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.     @ManyToOne(cascade = CascadeType.ALL)
  11.     @JoinColumn(name = "estId")
  12.     private Estado obje;
  13.     @OneToMany(cascade = CascadeType.ALL, mappedBy = "venta")    
  14.     private List<Registro>registros;
  15.     public VentaKey getKey() {
  16.         return key;
  17.     }
  18.     public void setKey(VentaKey key) {
  19.         this.key = key;
  20.     }    
  21.     public Estado getObje() {
  22.         return obje;
  23.     }
  24.     public void setObje(Estado obje) {
  25.         this.obje = obje;
  26.     }
  27.     public List<Registro> getRegistros() {
  28.         return registros;
  29.     }
  30.     public void setRegistros(List<Registro> registros) {
  31.         this.registros = registros;
  32.     }    
  33.     public Venta() { }        
  34.     public Venta(Subasta xobjs, Artefacto xobja, Estado obje) {
  35.         this.key = new VentaKey(xobjs,xobja);
  36.         this.obje = obje;
  37.     }    
  38.     @Override
  39.     public boolean equals(Object obj) {
  40.         if(obj instanceof Venta){
  41.             Venta v  =(Venta)obj;
  42.             return v.key.getObja() == this.key.getObja() && v.obje.equals(this.obje);
  43.         } else {
  44.             return false;
  45.         }
  46.     }
  47.     @Override
  48.     public int hashCode() {
  49.         int hash = 17;
  50.         hash = 31 * hash + this.key.getObja().hashCode();
  51.         hash = 31 * hash + this.obje.hashCode();
  52.         return hash;
  53.     }
  54.     @Override
  55.     public String toString() {
  56.         return this.key.getObja().getNombre() + " - estado: " + this.obje.getNombre();
  57.     }  
  58. }

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 subasta;
  10.     @ManyToOne(cascade = CascadeType.ALL)
  11.     @JoinColumn(name = "artId")
  12.     private Artefacto obja;
  13.     public Subasta getObjs(){
  14.         return subasta;
  15.     }
  16.     public void setObjs(Subasta objs) {
  17.         this.subasta = 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.subasta = 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.subasta.equals(this.subasta) && 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.subasta.hashCode();
  43.         hash = 31 * hash + this.obja.hashCode();
  44.         return hash;
  45.     }
  46. }

Subasta tiene una colección onetomany de ventas, pero ventas tiene una variable de tipo ventakey la cual tiene la subasta y artefacto (que son las claves primarias de la tabla ventas en mi bd) como atributo.
Que rebuscado es esto.

Espero sus respuestas y saludos.