Wrapper in java e hibernate

di il
7 risposte

Wrapper in java e hibernate

Ciao a tutti,

Come si fà il Wrapper di una classe costruita in Hibernate?


questo è il mio codice della classe in Hibernate:

@Entity
@Table(name="SKILL")
public class Skill {
	
	@Id 
	@Column(name="ID_SKILL")
	private int idSkill;
	
	@Column(name="NOME_SKILL")
	private String nomeSkill;
	
	@Column(name="CATEGORIA_SKILL")
	private String categoriaSkill;
	
	 
	public Skill(int idSkill, String nomeSkill, String categoriaSkill) {
		this.idSkill = idSkill;
		this.nomeSkill = nomeSkill;
		this.categoriaSkill = categoriaSkill;
	}
	
	public Skill() {}
	
	//INIZIO RELAZIONE N a N con get e set
	@ManyToMany(mappedBy="skill", fetch = FetchType.LAZY)
	private List<Candidato> candidato;
	
	public List<Candidato> getCandidato() {
		return candidato;
	}

	public void setCandidato(List<Candidato> candidato) {
		this.candidato = candidato;
	}
	//FINE RELAZIONE N a N


	public int getIdSkill() {
		return idSkill;
	}

	public void setIdSkill(int idSkill) {
		this.idSkill = idSkill;
	}

	public String getNomeSkill() {
		return nomeSkill;
	}

	public void setNomeSkill(String nomeSkill) {
		this.nomeSkill = nomeSkill;
	}

	public String getCategoriaSkill() {
		return categoriaSkill;
	}

	public void setCategoriaSkill(String categoriaSkill) {
		this.categoriaSkill = categoriaSkill;
	}
	
	
	
	

}

Questo è il codice della stessa classe fatto in un altro package:

public class SkillWrapper {

	private int idSkill;
	private String nomeSkill;
	private String categoriaSkill;
	
	public SkillWrapper(int idSkill, String nomeSkill, String categoriaSkill) {
		this.idSkill = idSkill;
		this.nomeSkill = nomeSkill;
		this.categoriaSkill = categoriaSkill;
	}

	public SkillWrapper() {}

	public int getIdSkill() {
		return idSkill;
	}

	public void setIdSkill(int idSkill) {
		this.idSkill = idSkill;
	}

	public String getNomeSkill() {
		return nomeSkill;
	}

	public void setNomeSkill(String nomeSkill) {
		this.nomeSkill = nomeSkill;
	}

	public String getCategoriaSkill() {
		return categoriaSkill;
	}

	public void setCategoriaSkill(String categoriaSkill) {
		this.categoriaSkill = categoriaSkill;
	}

	
}



Adesso queste due classi li devo fare il Wrapper in un altra classe per farmi restituire l'oggetto Skill (get) qual'è la procedura da seguire e scrivere nell'utility???


public class Utility {
	
	//chiamo la classe Wrapper
	
	//chiamo la classe Wrapper
	private SkillWrapper skillWrapper = null;

	
	public Skill getSkillWrapper(Integer idSkill) {
		Skill skill = null;
		skillWrapper.setIdSkill(idSkill);
		return skill;
	}

}

Come si fa a trasformare queste due classi per ottenere il wrapper?
Si fà in questo modo????

7 Risposte

  • Re: Wrapper in java e hibernate

    robot ha scritto:


    Come si fà il Wrapper di una classe costruita in Hibernate?
    Ma per quale motivo, esattamente?
  • Re: Wrapper in java e hibernate

    L'ho faccio giusto per complicarmi la vita...
    Vorrei capire esattamente il funzionamento per farmi restituire un oggetto wrapper di una classe.
    Qual'è la procedura da eseguire??

    oppure si fà in questo modo:
    
    
    public Skill getSkillWrapper() {
    		Skill skill = new Skill();
    		skillWrapper.setIdSkill(skill.getIdSkill());
    		skillWrapper.setNomeSkill(skill.getNomeSkill());
    		skillWrapper.setCategoriaSkill(skill.getCategoriaSkill());
    		return skill;
    	}
    
    
  • Re: Wrapper in java e hibernate

    Generalmente, una classe wrapper e' una classe che INGLOBA un oggetto di un'altra classe, ma si comporta come la classe dell'oggetto inglobato, ma, IN PIU' fa altre cose, ad esempio un logging migliore.

    Il codice ha una forma del tipo (e' PIU O MENO JAVA, adattalo di conseguenza):
    
    
    class Wrapper implements InterfaceImplementedByWrapped {
       private Wrapped _delegate
       
       public Wrapper(Wrapped d){
       	this._delegate = d
       }
       
       public float m1(int p1) {
       	Logger.getLogger(Wrapper.class).debug("Called m1()");	// fa qualcosa in PIU'
       	return this._delegate.m1(p1);						// DELEGA l'implementazione di m1 all'istanza di Wrapped
       }
    }
    
    
    NON TRASFERISCI lo stato dell'oggetto wrappato nella classe Wrapper, come nel tuo esempio, ma lo INGLOBI
  • Re: Wrapper in java e hibernate

    robot ha scritto:


    Vorrei capire esattamente il funzionamento per farmi restituire un oggetto wrapper di una classe.
    Qual'è la procedura da eseguire??
    Una classe "wrapper" (in senso generale, non riferito solo ad esempio alle classi wrapper dei primitivi) è semplicemente una classe che "incapsula" un oggetto (in generale un valore) di un altro tipo a cui delega le varie operazioni. La classe wrapper però può nascondere (o al contrario esporre) l'oggetto incapsulato e può alterare le operazioni in vari modi: esponendo metodi con nomi differenti o con comportamenti leggermente differenti o non permettendo alcune operazioni.

    Ad esempio la tua classe Skill è "mutabile", ha i setter che servono ad Hibernate. Una classe "wrapper" potrebbe esporre solo i getter e ad esempio mettendoli senza "Skill" come suffisso.
    public class SkillWrapper {
        private Skill skill;
    
        public SkillWrapper(Skill skill) {
            this.skill = skill;
        }
    
        public int getId() {
            return skill.getIdSkill();
        }
    
        public String getNome() {
            return skill.getNomeSkill();
        }
    
        // .....
    }
    Chiaramente dovrai prima ottenere un Skill, poi incapsularlo nel wrapper e il wrapper restituirlo o passarlo altrove.

    Skill skill = // .....query con Hibernate
    SkillWrapper skillWrapper = new SkillWrapper(skill);
    return skillWrapper;

    Il concetto è poi tutto lì ....
  • Re: Wrapper in java e hibernate

    Ok, ho capito.

    sto implementando il mio metodo ed ho bisogno di un aiuto
    
    public static List<SkillWrapper> getSkillWrapper(List<Skill> in) {
    		List<SkillWrapper> result = new ArrayList<SkillWrapper>();
    
    		for (Skill skillW : in) {
    			skillW.setIdSkill(in.get(in.size()).getIdSkill());
    			skillW.setNomeSkill(in.get(in.size()).getNomeSkill());
    			skillW.setCategoriaSkill(in.get(in.size()).getCategoriaSkill());
    		    	result.add(skillW); ---> qui mi da un errore
    		}
    
    		return result;
    	}
    
    
    Dove ho sbagliato??
    come faccio ad aggiungere result nella lista

    L'ho fatto in questo modo penso che non l'ho fatto bene:
    
    public static List<SkillWrapper> getSkillWrapper(List<Skill> in) {
    		List<SkillWrapper> result = new ArrayList<SkillWrapper>();
    
    		for (Skill skillW : in) {
    			skillW.setIdSkill(in.get(in.size()).getIdSkill());
    			skillW.setNomeSkill(in.get(in.size()).getNomeSkill());
    			skillW.setCategoriaSkill(in.get(in.size()).getCategoriaSkill());
    		    in.add((Skill) result);
    		}
    
    		return result;
    	}
    
    
  • Re: Wrapper in java e hibernate

    Risolto!!1
    
    public static List<SkillWrapper> getSkillWrapper(List<Skill> in) {
    		List<SkillWrapper> result = new ArrayList<SkillWrapper>();
    
    		for (Skill skillW : in) {
    			SkillWrapper skillWrapper = new SkillWrapper();
    			skillWrapper.setIdSkill(skillW.getIdSkill());
    			skillWrapper.setNomeSkill(skillW.getNomeSkill());
    			skillWrapper.setCategoriaSkill(skillW.getCategoriaSkill());
    			result.add(skillWrapper);
    		}
    
    
    
  • Re: Wrapper in java e hibernate

    robot ha scritto:


    
    			SkillWrapper skillWrapper = new SkillWrapper();
    			skillWrapper.setIdSkill(skillW.getIdSkill());
    			skillWrapper.setNomeSkill(skillW.getNomeSkill());
    			skillWrapper.setCategoriaSkill(skillW.getCategoriaSkill());
    
    SkillWrapper, fatto e usato così, non è quello che dicevo io. Una classe "wrapper", come ho detto prima, è una classe che INCAPSULA un altro valore/oggetto. Il tuo SkillWrapper non riceve e non tiene al suo interno un oggetto Skill. Quindi NON è un "wrapper". Fine della storia.
Devi accedere o registrarti per scrivere nel forum
7 risposte