Menu

Copiar una colección en OnChange

Arturo
2014-05-15
2014-05-15
  • Arturo

    Arturo - 2014-05-15

    Hola a todos.

    Necesito que ciertos valores de una colección de un objeto se copien en otra colección.
    Es decir, tengo una clase llamada visita. Esta clase contiene una referencia ManyToOne a cultivo. Esta ultima contiene una colección llamada nave. A su vez la pripia visita quiero que contenga una coleción de naves que serán una copia a las naves seleccionadas en el cultivo.
    De esta manera en la propiedad cultivo de la visita tengo declarado un OnChange de manera que cuando el cultivo es seleccionado (cuando se está creando) las naves del cultivo sean copiadas a esta propiedad.

    Así que lo tengo declarado de la siguiente manera.

    @Entity
    public class Visita {

    ......
    @ManyToOne( fetch=FetchType.LAZY )
    @Required
    @ReferenceView("desdeVisita")
    @OnChange(OnChangeCultivos.class)
    private Cultivo cultivo;

    @ManyToMany
    @JoinTable(name="visita_nave",
    joinColumns={@JoinColumn(name="visita_id",referencedColumnName="id")},
    inverseJoinColumns={@JoinColumn(name="nave_id",referencedColumnName="uuid")})
    private Collection<Nave_finca> naves;
    

    }

    public class Cultivo {
    ....
    @CollectionView("cultivo")
    private Set<Nave_finca> nave=new HashSet<Nave_finca>();

    }
    Estas naves son las que quiero copiar en el objeto naves de la clase finca. ¿Porque?, por que aunque la visita es sobre un cultivo y un cultivo está en un grupo de naves, algunas de estas naves no serían objeto de la visita, así que quiero poder selecionar el cultivo y deselecionar las naves que no están afectadas sin que estas afecten a la estructura del cultivo original.

    El Onchange despues de mucho tocar lo tengo de la siguiente manera.

    public class OnChangeCultivos extends OnChangePropertyBaseAction {

    public void execute() throws Exception {
        try{
            String uuidCultivo= (String)getNewValue();
            Cultivo cultivo = (Cultivo) XPersistence.getManager().createQuery("from Cultivo where uuid='"+uuidCultivo+"'").getSingleResult();
            Visita visita = (Visita) getView().getEntity();
            visita.setNaves(cultivo.getNave());
            getView().refresh();
    
        }catch(Exception e1){
            e1.printStackTrace();
    
        }
    
    }
    

    Pero no he conseguido nada. ¿Algún alma caritativa que pueda ayudarme? lo agradecere infinitamente.

    Ah, por aclarar. Esto se hace durante la creación de la visita, con lo que la entidad visita que se está creando todavía no está en la BBDD.

    Saludos.

     
  • Arturo

    Arturo - 2014-05-15

    Disculpad si he utilizado el foro equivocado. He abierto un topic en Ayuda en este link
    https://sourceforge.net/p/openxava/discussion/437013/thread/4c96a38e/

     

Log in to post a comment.