Menu

Posible bug en EllementCollection y ManyToOne

2016-11-30
2016-12-02
  • Gabriel Hermida

    Gabriel Hermida - 2016-11-30

    Buenos días,

    Trabajando ManyToOne estoy teniendo un comportamiento extraño en la aplicación que no había visto antes. Sucede de las iguiente forma:

    Tengo una clase incrustable que hace referencia a otra clase llamada Capitulos

    Uso la clase en una llamada Diagnostico, usando EllementCollection

    Cuando estoy adicionando registros en el detalle, puedos seleccionar hasta dos registro, pero al usar el combo para adiconar el tercero, se bloquea y no se puede seleccionar. Lo curioso es que si le doy clic sobre el combo y luego TAB, se habilitan los botones para crear y editar la referencia (que estaban bloqueados con NoCreate y Nomodify). Si uso losbotones y luego cancelar, me deja agregar otros dos registros y así sucesivamente.

    Esta muy raro este comprotamiento. Adjunto las clases para que alguien pueda ver si en verdad es un bug o algo hago mal.

    Gracias.

    Clase Diagnostico

    package org.openxava.SistemasGestion.modelo;

    import javax.persistence.;
    import java.util.
    ;
    import org.openxava.annotations.;
    import org.openxava.jpa.
    ;

    @Entity
    @View(members=
    "Auditoria [ sistema ;" +
    "auditor, fechaCierre ]
    "+
    "Observaciones {observaciones } ;" +
    "Calificacion {calificacion } ")
    @Table(name="diagnostico")
    public class Diagnostico {

    @Id
    @Hidden
    private int iddiagnostico;
    
    @ManyToOne
    @DescriptionsList(descriptionProperties="sistema,descripcion")
    @NoCreate
    @NoModify
    @JoinColumn(name="sistema",referencedColumnName="sistema")
    @ReferenceView("SistemaSimple")
    private ProcesoDeGestion sistema;
    
    @Column(length=50)
    private String auditor;
    
    @Column(name="fechacierre")
    private Date fechaCierre;
    
    @Column(length=1000)
    @Stereotype("MEMO")
    private String observaciones;
    
    @ElementCollection
    @CollectionTable(name = "diagnosticocapitulo",joinColumns=@JoinColumn(name="iddiagnostico"))
    @ListProperties("capitulo.numeral, puntaje ")
    private Collection<DetalleDiagnostico> calificacion;
    
    public int getIddiagnostico() {
        return iddiagnostico;
    }
    
    public void setIddiagnostico(int iddiagnostico) {
        this.iddiagnostico = iddiagnostico;
    }
    
    public ProcesoDeGestion getSistema() {
        return sistema;
    }
    
    public void setSistema(ProcesoDeGestion sistema) {
        this.sistema = sistema;
    }
    
    public String getAuditor() {
        return auditor;
    }
    
    public void setAuditor(String auditor) {
        this.auditor = auditor;
    }
    
    public Date getFechaCierre() {
        return fechaCierre;
    }
    
    public void setFechaCierre(Date fechaCierre) {
        this.fechaCierre = fechaCierre;
    }
    
    public String getObservaciones() {
        return observaciones;
    }
    
    public void setObservaciones(String observaciones) {
        this.observaciones = observaciones;
    }
    
    @PrePersist
    private void preGrabar() {
        Query query = XPersistence.getManager().createQuery("select max(d.iddiagnostico) from Diagnostico d " );
        Integer lastNumber = (Integer) query.getSingleResult();
        this.iddiagnostico = lastNumber == null?1:lastNumber + 1;
    }
    
    public Collection<DetalleDiagnostico> getCalificacion() {
        return calificacion;
    }
    
    public void setCalificacion(Collection<DetalleDiagnostico> calificacion) {
        this.calificacion = calificacion;
    }
    

    }

    Clase DetalleDiagnostico

    package org.openxava.SistemasGestion.modelo;

    import javax.persistence.*;

    import java.math.;
    import org.openxava.annotations.
    ;

    @Embeddable
    @Table(name="diagnosticocapitulo")
    public class DetalleDiagnostico {

    @Hidden
    private int iddiagcapitulo;
    
    @ManyToOne(fetch = FetchType.LAZY, optional = false)
    @DescriptionsList(descriptionProperties="numeral,nombre ")
    @NoCreate
    @NoModify
    @JoinColumn(name="idcapitulo",referencedColumnName="idcapitulo")
    @ReferenceView("CapituloSimple")
    private Capitulos capitulo;
    
    //@ReadOnly
    @Column(name="calificacion")
    private BigDecimal puntaje;
    
    public int getIddiagcapitulo() {
        return iddiagcapitulo;
    }
    
    public void setIddiagcapitulo(int iddiagcapitulo) {
        this.iddiagcapitulo = iddiagcapitulo;
    }
    
    public Capitulos getCapitulo() {
        return capitulo;
    }
    
    public void setCapitulo(Capitulos capitulo) {
        this.capitulo = capitulo;
    }
    
    public BigDecimal getPuntaje() {
        return puntaje;
    }
    
    public void setPuntaje(BigDecimal puntaje) {
        this.puntaje = puntaje;
    }
    

    }

    Clase capitulo

    package org.openxava.SistemasGestion.modelo;

    import java.math.;
    import javax.persistence.
    ;
    import org.openxava.annotations.;
    import org.openxava.jpa.
    ;

    import java.util.*;
    import org.hibernate.annotations.GenericGenerator;

    @Entity
    @Views({
    @View(name="CapituloSimple", members = "numeral, descripcion")})
    @View(members=
    "sistema ; " +
    "Capítulo [numeral, nombre; " +
    "responsable, presupuesto, fechaEstimada ]
    ")
    @Table(name="capitulos")
    public class Capitulos {

    @Id
    @Hidden
    @GenericGenerator(name="system-uuid", strategy="uuid")
    @Column(length=32)
    private int idcapitulo;
    
    @ManyToOne
    @DescriptionsList(descriptionProperties="sistema,descripcion")
    @NoCreate
    @NoModify
    @JoinColumn(name="sistema",referencedColumnName="sistema")
    @ReferenceView("SistemaSimple")
    private ProcesoDeGestion sistema;
    
    @Column(length=5,name="numeral")    
    private String  numeral;
    
    @Column(name="nombre",length=50)
    @Required
    private     String  nombre;
    
    @Column(name="responsable",length=30)
    private     String  responsable;
    
    @Column(name="presupuesto") 
    private     BigDecimal  presupuesto;
    
    @Column(name="fechaestimada")   
    private Date fechaEstimada;
    
    public String getNombre() {
        return nombre;
    }
    
    public void setNombre(String nombre) {
        this.nombre = nombre;
    }
    
    public String getResponsable() {
        return responsable;
    }
    
    public void setResponsable(String responsable) {
        this.responsable = responsable;
    }
    
    public BigDecimal getPresupuesto() {
        return presupuesto;
    }
    
    public void setPresupuesto(BigDecimal presupuesto) {
        this.presupuesto = presupuesto;
    }
    
    public Date getFechaEstimada() {
        return fechaEstimada;
    }
    
    public void setFechaEstimada(Date fechaEstimada) {
        this.fechaEstimada = fechaEstimada;
    }
    
    public String getNumeral() {
        return numeral;
    }
    
    public void setNumeral(String numeral) {
        this.numeral = numeral;
    }
    
    public ProcesoDeGestion getSistema() {
        return sistema;
    }
    
    public void setSistema(ProcesoDeGestion sistema) {
        this.sistema = sistema;
    }
    
    public int getIdcapitulo() {
        return idcapitulo;
    }
    
    public void setIdcapitulo(int idcapitulo) {
        this.idcapitulo = idcapitulo;
    }
    
    @PrePersist
    private void preGrabar() {
        Query query = XPersistence.getManager().createQuery("select max(c.idcapitulo) from Capitulos c " );
        Integer lastNumber = (Integer) query.getSingleResult();
        this.idcapitulo = lastNumber == null?1:lastNumber + 1;
    }
    

    }

     
  • Javier Paniza

    Javier Paniza - 2016-12-02

    Hola Gabriel:

    He probado en todos los ejemplos que tengo de @ElementCollection con @DescriptionsList y no he conseguido reproducirlo de ninguna manera. Sin embargo, he cogido tu código y lo he pegado en un proyecto nuevo, lo he probado y sí que falla. Así que hemos encontrado un bug. Añadelo y lo arregleramos los antes posible.


    Ayuda a otros en este foro como yo te ayudo a ti.

     
  • Gabriel Hermida

    Gabriel Hermida - 2016-12-02

    Hola,Javier.

    Gracias por tu atención. Ya lo he creado.

    710 Bug ElementCollectio OpenXava 5.6

    Saludos.

     

Log in to post a comment.