Menu

Acciones no aparecen en ManyToOne cuando no es @DescriptionsList

Marcos
2017-03-29
2017-03-29
  • Marcos

    Marcos - 2017-03-29

    Me sucede que cuando pongo una propiedad en una relación manytoone, las acciones solo me aparecen si uso @DescriptionsList. De lo contrario me aparecen como campos de solo lectura. Adjunto imágen con dos propiedades (unidad y carrera) una con @DescriptionsList y otra sin.
    https://www.dropbox.com/s/a0nxp7qggbaod9v/Captura.JPG?dl=0

     
  • Javier Paniza

    Javier Paniza - 2017-03-30

    Hola Marcos:

    Unidad es de solo lectura o forma parte de la clave primaria, o si estás usando XavaPro las añadido como solo lectura para ese rol, o algo así. Por defecto, las referncias con marco también tiene las acciones para añadir o modificar.

    ¿Tienes alguna acción personalizada para buscar o nuevo? Si es así pon aquí su código.

    Pon aquí el código de la entidad, para que te podamos dar alguna pista.

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

     
  • Marcos

    Marcos - 2017-04-02

    Este es el código de las entidades. En este caso hay una cadena de herencia entre "persona" o "alumno", de todas maneras es indiferente si uso una u otra clase, el error es el mismo. Aquí las tres clases:

    import javax.persistence.*;

    import org.openxava.annotations.*;

    @View(members="id, nroEntrevista;" +
    "Datos del Becario {alumno}" +
    "Datos Familiares {residencia;}" +
    "Datos Laborales {}" +
    "Sobre el PEUN {}" +
    "Trayectoria Educativa {}" +
    "Ingreso {}"+
    "Carrera {}"+
    "Información Cualitativa {}")
    @Entity
    public class Encuesta {

    public int getNroEntrevista() {
        return nroEntrevista;
    }
    
    public void setNroEntrevista(int nroEntrevista) {
        this.nroEntrevista = nroEntrevista;
    }
    
    @Column(name = "ID", nullable = false)
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @ReadOnly
    private int id;
    
    @ManyToOne(optional=false, fetch=FetchType.LAZY)
    private Alumno alumno;
    @Column(name = "Numero de Entrevista")
    private int nroEntrevista;
    
    @Column(name = "Lugar de residencia")
    private String residencia;
    public String getResidencia() {
        return residencia;
    }
    
    public void setResidencia(String residencia) {
        this.residencia = residencia;
    }
    
    public Alumno getAlumno() {
        return alumno;
    }
    
    public void setAlumno(Alumno alumno) {
        this.alumno = alumno;
    }
    
    public void setId(int aValue) {
        id = aValue;
    }
    
    public int getId() {
        return id;
    }
    

    }

    package org.openxava.peun.modelo;

    import javax.persistence.;
    import org.openxava.annotations.
    ;

    @Entity
    public class Persona {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @ReadOnly
    private int id;
    
    @Required
    private String nombre;
    
    @Required
    private String apellido;
    
    public void setId(int aValue) {
        id = aValue;
    }
    
    public int getId() {
        return id;
    }
    
    public void setNombre(String aValue) {
        nombre = aValue;
    }
    
    public String getNombre() {
        return nombre;
    }
    
    public void setApellido(String aValue) {
        apellido = aValue;
    }
    
    public String getApellido() {
        return apellido;
    }
    

    }

    package org.openxava.peun.modelo;

    import java.util.*;

    import javax.persistence.;
    import org.openxava.annotations.
    ;

    @Entity

    public class Alumno extends Persona {
    @ManyToOne( // La referencia se almacena como una relación en la base de datos
    fetch=FetchType.LAZY, // La referencia se carga bajo demanda
    optional=true) // La referencia puede estar sin valor
    @DescriptionsList // Así la referencia se visualiza usando un combo
    private UnidadAcademica unidad;
    @ManyToOne( // La referencia se almacena como una relación en la base de datos
    fetch=FetchType.LAZY, // La referencia se carga bajo demanda
    optional=true) // La referencia puede estar sin valor
    @DescriptionsList // Así la referencia se visualiza usando un combo
    private Carrera carrera;

    public String getLugarNacimiento() {
        return lugarNacimiento;
    }
    
    public void setLugarNacimiento(String lugarNacimiento) {
        this.lugarNacimiento = lugarNacimiento;
    }
    
    @ManyToOne(fetch=FetchType.LAZY)
    @DescriptionsList
    private CondicionBeca condicion;
    
    @ManyToOne(fetch=FetchType.LAZY)
    @DescriptionsList
    private TipoBeca tipoBeca;
    
    private String lugarNacimiento;
    
    public CondicionBeca getCondicion() {
        return condicion;
    }
    
    public void setCondicion(CondicionBeca condicion) {
        this.condicion = condicion;
    }
    
    public TipoBeca getTipoBeca() {
        return tipoBeca;
    }
    
    public void setTipoBeca(TipoBeca tipoBeca) {
        this.tipoBeca = tipoBeca;
    }
    
    @OneToMany
    @Collapsed
    private Collection<Encuesta> encuestas;
    
    public Collection<Encuesta> getEncuestas() {
        return encuestas;
    }
    
    public void setEncuestas(Collection<Encuesta> encuestas) {
        this.encuestas = encuestas;
    }
    
    public UnidadAcademica getUnidad() {
        return unidad;
    }
    
    public void setUnidad(UnidadAcademica unidad) {
        this.unidad = unidad;
    }
    
    public Carrera getCarrera() {
        return carrera;
    }
    
    public void setCarrera(Carrera carrera) {
        this.carrera = carrera;
    }
    

    }

     
  • Marcos

    Marcos - 2017-04-02

    El ejemplo de la imagen adjuntada lo hice con la clase Alumno y unidad academica, que funcionaba bien y le borre el @descriptionList para que se viera el problema. El error lo detecté en mi clase Encuesta, cuando lo puse en relación con la clase alumno!. Es decir que me pasa en todas las relaciones ManyToOne. Adjunto por las dudas la clase UnidadAcademica. Cabe aclarar que se hace readonly y desaparecen las acciones solo si saco el @descriptionList, sino funciona correctamente.

    package org.openxava.peun.modelo;

    import javax.persistence.*;

    import org.openxava.annotations.*;

    @Entity
    public class UnidadAcademica {

    @Column(name = "ID", nullable = false)
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @ReadOnly
    private int id;
    
    @Required
    private String nombre;
    
    public int getId() {
        return id;
    }
    
    public void setId(int id) {
        this.id = id;
    }
    
    public String getNombre() {
        return nombre;
    }
    
    public void setNombre(String nombre) {
        this.nombre = nombre;
    }
    

    }

     

    Last edit: Marcos 2017-04-02
  • Javier Paniza

    Javier Paniza - 2017-04-04

    Hola Marcos:

    Quítale el @ReadOnly al id de Persona.

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

     
  • Marcos

    Marcos - 2017-04-04

    Ahí funciono. No había comprendido que la clave primaria no podía ser read ony cuando uso la clase como atributo. De todas maneras, y claramente estaba equivocado, estaba completamente convencido de que ya había probado esto. Mil disculpas y gracias!!

     

Log in to post a comment.