Problemas relacionamentos n..n com VRaptor+Hibernate

2 respostas
V

Bom dia!!!
Gostaria de pedir uma ajudinha …

Estou utilizando VRaptor+Hibernate+JSP.
No meu código, tenho uma classe Historia e uma classe Complementar e um relacionamento n…n entre elas. O Hibernate já criou para mim as respectivas tabelas e a tabela de relacionamentos Historia_Complementar.
Na outra ponta, na interface, tenho uma lista(um select) de todas as Historias cadastradas e uma lista que deverá conter apenas as Historias relacionadas à descrição complementar que estará sendo cadastrada. Posso incluir ou excluir Historias neste relacionamento. Até aí tudo bem, mas quando chego na lógica, não estou conseguindo fazer estas associações…

Alguém poderia me dar um help ?? Se não estiver claro, posso postar o código aqui, a figura da interface.

Aguardo respostas…

Muito obrigada

Viviane

2 Respostas

pablofaria

posta o código aí

V

No pacote logic:

package org.vraptor.historia.logic;

import org.vraptor.daogeral.DaoFactory;

import org.vraptor.historia.model.Historia;

import org.vraptor.historia.model.Atividade;

import org.vraptor.daogeral.DaoInterceptor;

import java.util.List;

import org.vraptor.plugin.hibernate.Validate;

import org.vraptor.annotations.InterceptedBy;

import org.vraptor.annotations.Component;
@Component(historia)

@InterceptedBy(DaoInterceptor.class)

public class HistoriaLogic {

//public List atividades;

private final DaoFactory factory;
public Historia historia;
public List<Historia> historias;


public HistoriaLogic(DaoFactory factory) {
	this.factory = factory;
}

public void adiciona(Historia historia){    
    this.factory.beginTransaction();
    this.factory.getHistoriaDao().adiciona(historia);
    this.factory.commit();
}
/*    public void editar(Historia historia) {

this.historia = this.factory.getHistoriaDao().procuraId(historia.getCodHistoria());

}*/
@Validate(params={"historia"}) 
public void armazena (Historia historia) {
    this.factory.beginTransaction();
    this.factory.getHistoriaDao().atualiza(historia);
    this.factory.commit();
}    

public void remove(Historia historia){
    this.factory.beginTransaction();
    this.factory.getHistoriaDao().exclui(historia);
    this.factory.commit();
}

public void editar(Historia historia) {
    this.historia = (Historia) this.factory.getHistoriaDao().procuraId(historia.getCodHistoria());
}
public void listaHistoria(){

historias = this.factory.getHistoriaDao().listaTudo();

}
public void lista(){

historias = this.factory.getHistoriaDao().listaTudo();

}
public Historia getHistoria(){

return historia;

}
public List getHistorias(){

return historias;

}

}

package org.vraptor.historia.logic;

import org.vraptor.daogeral.DaoFactory;

import org.vraptor.historia.model.Complementar;

import org.vraptor.daogeral.DaoInterceptor;

import java.util.List;

import org.vraptor.plugin.hibernate.Validate;

import org.vraptor.annotations.InterceptedBy;

import org.vraptor.annotations.Component;

import org.vraptor.historia.model.Historia;

import org.vraptor.historia.model.Complementar;
@Component(complementar)

@InterceptedBy(DaoInterceptor.class)

public class ComplementarLogic{
private final DaoFactory factory;

public Complementar complementar;
public List<Complementar> complementares;

public ComplementarLogic(DaoFactory factory) {
	this.factory = factory;
}

private Historia historia;

public Historia getHistoria(){
    return historia;
}
public List getListaHistorias() {

return this.factory.getHistoriaDao().listaTudo();

}
public void adiciona(Complementar complementar){    
    this.factory.beginTransaction();
    this.factory.getComplementarDao().adiciona(complementar);
    this.factory.commit();
}

@Validate(params={"complementar"})
public void armazena(Complementar complementar) {
    this.factory.beginTransaction();
    this.factory.getComplementarDao().atualiza(complementar);
    this.factory.commit();
    
}     

public void remove(Complementar complementar){
    this.factory.beginTransaction();
    this.factory.getComplementarDao().exclui(complementar);
    this.factory.commit();
}

// metodo usado para popular o select de Historias
public List<Historia> getHistorias() {
    return this.factory.getHistoriaDao().listaTudo();
}
public void lista(){

complementares = this.factory.getComplementarDao().listaTudo();

}
public Complementar getComplementar(){

return complementar;

}
public List getComplementares(){

return complementares;

}
public void listaPorHistoria(Historia historia) {

this.historia = (Historia) this.factory.getHistoriaDao().procuraId(historia.getCodHistoria());

}
public void listaHistRel(Complementar complementar) {

this.historia = (Historia) this.factory.getComplementarDao().procuraId(historia.getCodHistoria());

}

}


No pacote model (está ok, pois o hibernate já criou até a tabela de relacionamento):

package org.vraptor.historia.model;

import javax.persistence.Entity;

import javax.persistence.GenerationType;

import javax.persistence.GeneratedValue;

import javax.persistence.JoinTable;

import <a href="http://javax.persistence.Id">javax.persistence.Id</a>;

import javax.persistence.FetchType;

import javax.persistence.JoinColumn;

import javax.persistence.ManyToOne;

import javax.persistence.ManyToMany;

import javax.persistence.OneToMany;

import org.hibernate.annotations.Fetch;

import org.hibernate.annotations.FetchMode;

import org.hibernate.annotations.Cascade;

import org.hibernate.annotations.CascadeType;

import org.hibernate.validator.Length;

import org.hibernate.validator.NotNull;

import org.vraptor.cenario.model.Cenario;

import java.util.Set;

import org.vraptor.projeto.model.Projeto;

@Entity
public class Historia {

@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)        
    private int codHistoria;

    private String nome;
    
    @Length(min = 0, max = 140)        
    private String objetivo;   

    private String ativGrupo;
    
  /********************************************************************************/        
  /**************** Mapeando os Relacionamentos ***********************************/        
  /********************************************************************************/        

  /**** Relacionamento entre Histórias e os Fragmentos de Atividades ********************/                

    @OneToMany(mappedBy="historia", fetch = FetchType.LAZY)
    @Cascade(CascadeType.ALL)
    private Set<Atividade> atividades;    
    
  /*************** Relacionamento entre Historia e Descricoes complementares (classe responsável) ******/            
    @ManyToMany(fetch=FetchType.LAZY)
    @JoinTable(name="historia_complementar", schema="public",
    joinColumns=@JoinColumn(name="codHistoria"),
    inverseJoinColumns=@JoinColumn(name="codComplementar"))
    private Set<Complementar> complementares;            
    
  /***************** Relacionamento entre Historia e Cenários (classe responsável) **********************/            
    @ManyToMany(fetch=FetchType.LAZY)
    @JoinTable(name="historia_cenario", schema="public",joinColumns=@JoinColumn(name="codHistoria"),
    inverseJoinColumns=@JoinColumn(name="codCenario"))
    private Set<Cenario> cenarios;        
          

  /********************************************************************************/                    
  /********************** Getters e Setters ***************************************/                
  /********************************************************************************/                

    public int getCodHistoria() {
        return codHistoria;
    }

    public void setCodHistoria(int codHistoria) {
        this.codHistoria = codHistoria;
    }

    public String getNome() {
        return nome;
    }
    
    public void setNome(String nome) {
        this.nome = nome;
    }    

    public String getObjetivo() {
        return objetivo;
    }

    public void setObjetivo(String objetivo) {
        this.objetivo = objetivo;
    }

    public String getAtivGrupo() {
        return ativGrupo;
    }
    public void setAtivGrupo(String ativGrupo) {
        this.ativGrupo = ativGrupo;
    }     


    public Set<Complementar> getComplementares() {
         return complementares;
    }

    public void setComplementares(Set<Complementar> complementares) {
        this.complementares = complementares;
    } 

    public Set<Cenario> getCenarios() {
         return cenarios;
    }

    public void setCenarios (Set<Cenario> cenarios) {
        this.cenarios = cenarios;
    } 

    public Set<Atividade> getAtividades() {
         return atividades;
    }

    public void setAtividades (Set<Atividade> atividades) {
        this.atividades = atividades;
    }

}


package org.vraptor.historia.model;

import javax.persistence.Entity;

import javax.persistence.GeneratedValue;

import javax.persistence.GenerationType;

import <a href="http://javax.persistence.Id">javax.persistence.Id</a>;

import javax.persistence.Temporal;

import javax.persistence.TemporalType;

import javax.persistence.FetchType;

import javax.persistence.JoinTable;

import javax.persistence.JoinColumn;

import javax.persistence.ManyToMany;
import java.util.Set;

import org.hibernate.validator.Length;

import org.hibernate.validator.NotNull;

import org.vraptor.projeto.model.Figura;

@Entity
public class Complementar {

@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
    private int codComplementar;      

    private String conhecimento;        
    private String dificuldade;  
    private String contexto;  
    private String organizacional;  
  
  /********************************************************************************/        
  /**************** Mapeando os Relacionamentos ***********************************/        
  /********************************************************************************/        
  
  /*************** Relacionamento entre Historia e Descricoes complementares (classe responsável) ******/            
    @ManyToMany(fetch=FetchType.LAZY)
    @JoinTable(name="historia_complementar", schema="public",
    joinColumns={@JoinColumn(name="codComplementar")},
    inverseJoinColumns={@JoinColumn(name="codHistoria")})
    private Set<Historia> historias;        

  /************** Relacionamento entre Descricoes Complementares e Figuras***********************************/            

    @ManyToMany(fetch=FetchType.LAZY)
    @JoinTable(name="figura_complementar", schema="public",
    joinColumns={@JoinColumn(name="codComplementar")},
    inverseJoinColumns={@JoinColumn(name="codFigura")})
    private Set<Figura> figuras;              
   
  /********************************************************************************/                
  /********************** Getters e Setters ***************************************/                
  /********************************************************************************/                

    public int getCodComplementar() {
        return codComplementar;
    }

    public void setCodComplementar(int codComplementar) {
        this.codComplementar = codComplementar;
    }

    public String getConhecimento() {
        return conhecimento;
    }

    public void setConhecimento(String conhecimento) {
        this.conhecimento = conhecimento;
    }
        
    public String getDificuldade() {
        return dificuldade;
    }

    public void setDificuldade(String dificuldade) {
        this.dificuldade = dificuldade;
    }
    
    public String getContexto() {
        return contexto;
    }

    public void setContexto(String contexto) {
        this.contexto = contexto;
    }
    
    public String getOrganizacional() {
        return organizacional;
    }

    public void setOrganizacional(String organizacional) {
        this.organizacional= organizacional;
    } 

  /********************************************************************************/                
    public Set<Historia> getHistorias() {
         return historias;
    }

    public void setHistorias(Set<Historia> historias) {
        this.historias = historias;
    } 
    public Set<Figura> getFiguras() {
         return figuras;
    }

    public void setFiguras(Set<Figura> figuras) {
        this.figuras = figuras;
    }

}


No pacote Dao:

package org.vraptor.historia.dao;

import org.hibernate.Query;

import org.hibernate.Session;

import org.hibernate.HibernateException;

import org.hibernate.Transaction;

import org.hibernate.criterion.Restrictions;

import java.util.List;
import org.vraptor.daogeral.Dao;

import org.vraptor.historia.model.Historia;

import org.vraptor.historia.model.Complementar;

public class HistoriaDao extends Dao{

public HistoriaDao(Session session) {
  super(session, Historia.class);
}    

public Historia procuraId(int codHistoria) {
    return (Historia) session.load(Historia.class, codHistoria);
}

public Historia procuraPorCompl(Complementar c, Historia h) {
    String hql = "select h from Historia_Complementar as h where h.codcodcomplementar = :c.codComplementar";
    Query query = getSession().createQuery(hql);
    query.setParameter("codHistoria", h.getCodHistoria());
    return (Historia) query.uniqueResult();       
}

public Historia existeUnico (Historia h) {
    String hql = "select h from Historia as h where h.codProjeto = :codProjeto";
    Query query = getSession().createQuery(hql);
    query.setParameter("codHistoria", h.getCodHistoria());
    return (Historia) query.uniqueResult();
} 

public List<Historia> listar(){
    Query select = session.createQuery("from Historia order by cod_historia");
    return select.list();
}

}


package org.vraptor.historia.dao;

import org.hibernate.Query;

import org.hibernate.Session;

import org.hibernate.HibernateException;

import org.hibernate.Transaction;

import org.hibernate.criterion.Restrictions;

import java.util.List;
import org.vraptor.daogeral.Dao;

import org.vraptor.historia.model.Complementar;

import org.vraptor.historia.model.Historia;

public class ComplementarDao extends Dao{

public ComplementarDao(Session session) {

super(session, Complementar.class);

}
public Complementar procuraId(int codComplementar) {
    return (Complementar) session.load(Complementar.class, codComplementar);
}

public Historia procuraHistoriaRel (Complementar c, Historia h) {
    String hql = "select h from historia, historia_complementar where h.codhistoria = historia_complementar.codhistoria and historia_complementar.codComplementar=c.codComplementar ";
    Query query = getSession().createQuery(hql);
    query.setParameter("codComplementar", c.getCodComplementar());
    return (Historia) query.uniqueResult();
}     

public Complementar existeUnico (Complementar c) {
    String hql = "select c from DescComplemHist as c where c.codComplementar =: codComplementar";
    Query query = getSession().createQuery(hql);
    query.setParameter("codComplementar", c.getCodComplementar());
    return (Complementar) query.uniqueResult();
}

}

Se alguém puder me dar um help …

Abs

Criado 15 de dezembro de 2007
Ultima resposta 16 de dez. de 2007
Respostas 2
Participantes 2