[RESOLVIDO] Consulta Hibernate

Boa noite pessoal!

Estou precisando realizar uma consulta a um cadastro que será filtrado de acordo com as unidades que o usuário logado pertence. Basicamente para implementar uma funcionalidade de multi-unidades. Para isso no momento de consultar os professores, busco às unidades que o usuário logado pertence, porém está dando erro. Abaixo segue o erro, a consulta e a classe que representa os professores.

com.mysql.jdbc.JDBC4PreparedStatement@a3fcb7: select this_.CD_PROFESSOR as CD1_1_1_, this_.ATIVO as ATIVO1_1_, this_.BAIRRO as BAIRRO1_1_, this_.CIDADE as CIDADE1_1_, this_.CPF as CPF1_1_, this_.DT_ATUALIZACAO as DT6_1_1_, this_.DT_CADASTRO as DT7_1_1_, this_.EMAIL as EMAIL1_1_, this_.ENDERECO as ENDERECO1_1_, this_.ESTADO as ESTADO1_1_, this_.IDENTIDADE as IDENTIDADE1_1_, this_.DT_NASCIMENTO as DT12_1_1_, this_.NM_PROFESSOR as NM13_1_1_, this_.OBSERVACOES as OBSERVA14_1_1_, this_.TEL_CEL as TEL15_1_1_, this_.TEL_COM as TEL16_1_1_, this_.TEL_RESID as TEL17_1_1_, this_.CD_TIPOLOGIA as CD20_1_1_, this_.CD_USUARIO_ATUALIZACAO as CD18_1_1_, this_.CD_USUARIO_CADASTRO as CD19_1_1_, tipologia2_.CD_TIPOLOGIA as CD1_3_0_, tipologia2_.DT_ATUALIZACAO as DT2_3_0_, tipologia2_.DT_CADASTRO as DT3_3_0_, tipologia2_.NM_SITUACAO as NM4_3_0_, tipologia2_.NM_TIPOLOGIA as NM5_3_0_, tipologia2_.CD_USUARIO_ATUALIZACAO as CD6_3_0_, tipologia2_.CD_USUARIO_CADASTRO as CD7_3_0_, tipologia2_.VALOR as VALOR3_0_ from professor this_ left outer join tipologia tipologia2_ on this_.CD_TIPOLOGIA=tipologia2_.CD_TIPOLOGIA where this_.ATIVO=1 and this_.CD_PROFESSOR in (** NOT SPECIFIED **, ** NOT SPECIFIED **)
19/05/2013 22:52:15 com.sun.faces.application.view.FaceletViewHandlingStrategy handleRenderException
GRAVE: Error Rendering View[/restrito/manutencaoProfessor.xhtml]
javax.el.ELException: /restrito/manutencaoProfessor.xhtml @180,46 value="#{ProfessorController.lista}": Error reading 'lista' on type br.com.folha.controller.ProfessorController
	at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:107)
	at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:190)
	at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:178)
	at javax.faces.component.UIData.getValue(UIData.java:554)
	at org.primefaces.component.datatable.DataTable.getValue(DataTable.java:867)
	at org.primefaces.component.api.UIData.getDataModel(UIData.java:579)
	at javax.faces.component.UIData.getRowCount(UIData.java:339)
	at org.primefaces.component.api.UIData.calculateFirst(UIData.java:157)
	at org.primefaces.component.datatable.DataTableRenderer.encodeMarkup(DataTableRenderer.java:176)
	at org.primefaces.component.datatable.DataTableRenderer.encodeEnd(DataTableRenderer.java:82)
	at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:878)
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1620)
	at javax.faces.render.Renderer.encodeChildren(Renderer.java:168)
	at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:848)
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1613)
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1616)
	at com.sun.faces.context.PartialViewContextImpl.renderAll(PartialViewContextImpl.java:383)
	at com.sun.faces.context.PartialViewContextImpl.processPartial(PartialViewContextImpl.java:279)
	at javax.faces.context.PartialViewContextWrapper.processPartial(PartialViewContextWrapper.java:179)
	at javax.faces.component.UIViewRoot.encodeChildren(UIViewRoot.java:989)
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1613)
	at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:369)
	at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:126)
	at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:127)
	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
	at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:313)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
	at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:118)
	at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:84)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:103)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:113)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:54)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:45)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	at org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilter(BasicAuthenticationFilter.java:150)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:183)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:105)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:192)
	at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:160)
	at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:237)
	at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1002)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:585)
	at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:1813)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:662)
Caused by: org.hibernate.exception.SQLGrammarException: could not execute query
	at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:67)
	at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
	at org.hibernate.loader.Loader.doList(Loader.java:2223)
	at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2104)
	at org.hibernate.loader.Loader.list(Loader.java:2099)
	at org.hibernate.loader.criteria.CriteriaLoader.list(CriteriaLoader.java:94)
	at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1569)
	at org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:283)
	at br.com.folha.dao.ProfessorDao.listaProfessorAtivo(ProfessorDao.java:52)
	at br.com.folha.controller.ProfessorController.getLista(ProfessorController.java:361)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at javax.el.BeanELResolver.getValue(BeanELResolver.java:87)
	at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:67)
	at com.sun.faces.el.FacesCompositeELResolver.getValue(FacesCompositeELResolver.java:72)
	at org.apache.el.parser.AstValue.getValue(AstValue.java:183)
	at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:185)
	at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:102)
	... 70 more
Caused by: java.sql.SQLException: No value specified for parameter 2
	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1075)
	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:989)
	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:984)
	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:929)
	at com.mysql.jdbc.PreparedStatement.checkAllParametersSet(PreparedStatement.java:2549)
	at com.mysql.jdbc.PreparedStatement.fillSendPacket(PreparedStatement.java:2525)
	at com.mysql.jdbc.PreparedStatement.fillSendPacket(PreparedStatement.java:2451)
	at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:2205)
	at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeQuery(NewProxyPreparedStatement.java:116)
	at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:186)
	at org.hibernate.loader.Loader.getResultSet(Loader.java:1787)
	at org.hibernate.loader.Loader.doQuery(Loader.java:674)
	at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
	at org.hibernate.loader.Loader.doList(Loader.java:2220)
	... 87 more

Consulta

    public List<Object> listaProfessorAtivo(Object t){
        Session sessao = HibernateUtil.getSessionFactory();
        LoginController login = new LoginController();
        Criteria criteria = sessao.createCriteria(t.getClass()).add(Restrictions.eq("ativo", true));
        System.out.println("Unidades :"+login.Usuario.getUnidades());
        criteria.add(Restrictions.in("unidades", login.Usuario.getUnidades().toArray()));
        List lista = criteria.list();
        sessao.close();
        return lista;                        
    }

Professor.java

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.folha.entity;

import java.io.Serializable;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;

/**
 *
 * @author marceloml
 */
@Entity
@Table(name="professor")
public class Professor implements Serializable {
    private static final long serialVersionUID = 1L;
    
    @Id
    @GeneratedValue(strategy= GenerationType.IDENTITY)
    @Column(name = "CD_PROFESSOR")
    private Integer id;
    
    @Column(name = "NM_PROFESSOR")
    private String nome; 
    
    @Column(name = "CPF")
    private String cpf;
    
    @Column(name = "ENDERECO")
    private String endereco;
    
    @Column(name = "BAIRRO")
    private String bairro;
    
    @Column(name = "CIDADE")
    private String cidade;
    
    @Column(name = "ESTADO")
    private String estado;
    
    @Column(name = "IDENTIDADE")
    private String identidade;
    
    @Column(name = "EMAIL")
    private String email;
    
    @Column(name = "TEL_RESID")
    private String telResid;
    
    @Column(name = "TEL_CEL")
    private String telCel;
    
    @Column(name = "TEL_COM")
    private String telCom;
    
    @Column(name = "DT_NASCIMENTO")
    private String nascimento;
    
    @Column(name = "OBSERVACOES")
    private String observacoes;     
    
    @Column(name = "DT_CADASTRO")
    @Temporal(javax.persistence.TemporalType.DATE)
    private Date dt_cadastro;     
    
    @Column(name = "CD_USUARIO_CADASTRO")
    private Integer usuario_cadastro;      

    @Column(name = "DT_ATUALIZACAO")
    @Temporal(javax.persistence.TemporalType.DATE)
    private Date dt_atualizacao;          

    @Column(name = "CD_USUARIO_ATUALIZACAO")
    private Integer usuario_atualizacao;   
    
    @Column(name = "ATIVO")
    private Boolean ativo;            
    
    @OneToMany(fetch= FetchType.EAGER, cascade= CascadeType.PERSIST)
    @Fetch(FetchMode.SELECT)
        @JoinTable(name = "professor_unidade", joinColumns = {
        @JoinColumn(name = "CD_PROFESSOR")},
    inverseJoinColumns = {
        @JoinColumn(name = "CD_UNIDADE")})
    private Set<Unidade> unidades = new HashSet<Unidade>(0);  
    
    @OneToOne
    @JoinColumn(name="CD_TIPOLOGIA")    
    private Tipologia tipologia;
    
    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    @Override
    public String toString() {
        return "br.com.folha.entity.Professor[ id=" + getId() + " ]";
    }

    public String getNome() {
        return nome;
    }

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

    public String getNascimento() {
        return nascimento;
    }

    public void setNascimento(String nascimento) {
        this.nascimento = nascimento;
    }

    public String getObservacoes() {
        return observacoes;
    }

    public void setObservacoes(String observacoes) {
        this.observacoes = observacoes;
    }

    public Integer getUsuario_cadastro() {
        return usuario_cadastro;
    }

    public void setUsuario_cadastro(Integer usuario_cadastro) {
        this.usuario_cadastro = usuario_cadastro;
    }

    public Date getDt_atualizacao() {
        return dt_atualizacao;
    }

    public void setDt_atualizacao(Date dt_atualizacao) {
        this.dt_atualizacao = dt_atualizacao;
    }

    public Integer getUsuario_atualizacao() {
        return usuario_atualizacao;
    }

    public void setUsuario_atualizacao(Integer usuario_atualizacao) {
        this.usuario_atualizacao = usuario_atualizacao;
    }

    public Date getDt_cadastro() {
        return dt_cadastro;
    }

    public void setDt_cadastro(Date dt_cadastro) {
        this.dt_cadastro = dt_cadastro;
    }

    public Boolean getAtivo() {
        return ativo;
    }

    public void setAtivo(Boolean ativo) {
        this.ativo = ativo;
    }

    public Set<Unidade> getUnidades() {
        return unidades;
    }
    
    public void setUnidades(Set<Unidade> unidades) {
        this.unidades = unidades;
    }

    public Tipologia getTipologia() {
        return tipologia;
    }

    public void setTipologia(Tipologia tipologia) {
        this.tipologia = tipologia;
    }

    public String getEndereco() {
        return endereco;
    }

    public void setEndereco(String endereco) {
        this.endereco = endereco;
    }

    public String getBairro() {
        return bairro;
    }

    public void setBairro(String bairro) {
        this.bairro = bairro;
    }

    public String getCidade() {
        return cidade;
    }

    public void setCidade(String cidade) {
        this.cidade = cidade;
    }

    public String getEstado() {
        return estado;
    }

    public void setEstado(String estado) {
        this.estado = estado;
    }

    public String getIdentidade() {
        return identidade;
    }

    public void setIdentidade(String identidade) {
        this.identidade = identidade;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getTelResid() {
        return telResid;
    }

    public void setTelResid(String telResid) {
        this.telResid = telResid;
    }

    public String getTelCel() {
        return telCel;
    }

    public void setTelCel(String telCel) {
        this.telCel = telCel;
    }

    public String getTelCom() {
        return telCom;
    }

    public void setTelCom(String telCom) {
        this.telCom = telCom;
    }

    public String getCpf() {
        return cpf;
    }

    public void setCpf(String cpf) {
        this.cpf = cpf;
    }
    
}

Conto com a ajuda de vocês.

Posta sua classe Controller aqui

Amigo, segue abaixo o meu controller:

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.folha.controller;

import br.com.folha.dao.GenericoDao;
import br.com.folha.dao.ProfessorDao;
import br.com.folha.dao.TipologiaDao;
import br.com.folha.dao.UnidadeDao;
import br.com.folha.entity.Professor;
import br.com.folha.entity.Tipologia;
import br.com.folha.entity.Unidade;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;
import javax.faces.model.SelectItem;

/**
 *
 * @author marceloml
 */
@ManagedBean(name = "ProfessorController")
@ViewScoped
public final class ProfessorController implements Serializable{
    
    private static final long serialVersionUID = 1L;
    private Professor professor;
    private Professor professorSelecionado;
    private ProfessorDao consulta = new ProfessorDao();
    private GenericoDao professorDAO = new GenericoDao();
    
    private Unidade unidade;
    private UnidadeDao unidadeDao = new UnidadeDao();
        
    private Boolean[] ativoSelecionado;
    private Map<String,Integer> unidades; 
    private List<Professor> filtered;
    private List<String> suaLista;
    private List<String> selectedUnidades;    
    private List<Unidade> retornoUnidades;    
    
    private TipologiaDao tipologiaDao = new TipologiaDao();
    private Tipologia tipologia;
    private Map<String,Integer> tipologias;
    private List<Tipologia> retornoTipologias;
    private Integer selectedTipologia;
    
    private DataModel lista;
    private boolean retorno;
    private Long resultado;
    private Date data = new Date();
    private String acao;
    private boolean ativoInativo;
    
    private int contador = 0;
    
    public ProfessorController() {                               
        
        professor = new Professor();       
        
        this.ativoInativo = true;
        
       populaSelectUnidade();       
                        
    }
    
    public void populaSelectUnidade(){
        
        unidades = new HashMap<String,Integer>(); 
        
        unidade = new Unidade();
        
        retornoUnidades = unidadeDao.listaUnidade(unidade);
        
        for (Iterator iterator = retornoUnidades.iterator(); iterator.hasNext();){
            
            Unidade unidade = (Unidade) iterator.next();                     
            
            unidades.put(unidade.getNome(), unidade.getId());                                
        
        }         
        
    }     
    
  public Collection<SelectItem> getCarregarSelect() {        
      
      tipologia = new Tipologia();
      
        Collection<SelectItem> lst = new ArrayList<SelectItem>();        
        lst.add(new SelectItem(null, "Selecione a tipologia"));      //Primeiro item do select   
        List<Tipologia> lista = tipologiaDao.listaTipologia(tipologia);
        for (int i = 0; i < lista.size(); i++) {          
            lst.add(new SelectItem(lista.get(i).getId(), lista.get(i).getNome()));              
        }          
        return lst;          
    }    
    
    //Funções
    
    public void preparaInclusao(){                        
        
        FacesMessage msg = null;        
        
        if(professor.getNome().equals("")){
                        
            msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "O nome do professor deve ser informado!", "");
            FacesContext.getCurrentInstance().addMessage(null, msg);  
            
        }else if(professor.getNascimento().equals("")){
            
            msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "A data de nascimento deve ser informada!", "");
            FacesContext.getCurrentInstance().addMessage(null, msg);              
        
        }else if(professor.getCpf().equals("")){
            
            msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "O CPF deve ser informado!", "");
            FacesContext.getCurrentInstance().addMessage(null, msg);   
            
        }else if(this.selectedUnidades.isEmpty()){
           
            msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "O professor deve ser vinculado a uma unidade!", "");
            FacesContext.getCurrentInstance().addMessage(null, msg);        
            
        }else if(this.selectedTipologia.equals("") || this.selectedTipologia == 0 || this.selectedTipologia == null){
            
            msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Deve ser informada a tipologia do professor!", "");
            FacesContext.getCurrentInstance().addMessage(null, msg);             
            
        }else{
            
            /*
             * Aqui é verificado se o professor está sendo incluído
             * ou atualizado
             */        
            if(acao != "edicao"){
            
                    resultado = consulta.consultaProfessor(professor.getNome());

                    if(resultado == 0){
                        salvaOperacao();

                    }else{                        
                        msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Professor já existente!", "");
                        FacesContext.getCurrentInstance().addMessage(null, msg);            
                    }
        
            }else{
                
                editaProfessor();
                acao = "";
            }
            
        }
        
    }
    
    public void salvaOperacao(){
        
        FacesMessage msg = null;                 
                        
        //Seta a data de Cadastro
        professor.setDt_cadastro(data);
        
        LoginController usuarioLogado = new LoginController();
        
        //Seta usuário que cadastrou o professor
        professor.setUsuario_cadastro(usuarioLogado.Usuario.getId());        
        
        //Seta se o professor estará ativo ou não
        if(this.ativoSelecionado == null || this.ativoSelecionado.length == 0){
            professor.setAtivo(false);
        }else{
            professor.setAtivo(this.ativoSelecionado[0]);
        }                                             
            
        Set<Unidade> unidades = new HashSet<Unidade>();
        
        //For utilizado para varrer os itens selecionados no select de Unidades
        for (int i = 0; i < this.selectedUnidades.size(); i++){                         
            
            Integer codigo = Integer.parseInt(this.selectedUnidades.get(i));
            
            Unidade unidadeProfessor = new Unidade();            
            unidadeProfessor = unidadeDao.getById(codigo);                                  
                        
            unidades.add(unidadeProfessor);            
                                    
            professor.setUnidades(unidades);
        } 
        
        professor.setTipologia(tipologiaDao.getById(this.selectedTipologia));       
        
        retorno = professorDAO.salvar(professor);                
        
        lista = new ListDataModel(consulta.listaProfessorAtivo(professor));
        
        resetProfessor();
        
        if(retorno){                   
            msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Professor cadastrado com sucesso!", "");
            FacesContext.getCurrentInstance().addMessage(null, msg);
        }                
        
    }
    
    public void editaProfessor(){
        
        FacesMessage msg = null;                 
                        
        //Seta data de atualização
        professor.setDt_atualizacao(data);
        
        LoginController usuarioLogado = new LoginController();
        
        //Seta usuário que está alterando o professor
        professor.setUsuario_atualizacao(usuarioLogado.Usuario.getId());
        
       //Seta se o professor estará ativo ou não
        if(this.ativoSelecionado == null || this.ativoSelecionado.length == 0){
            professor.setAtivo(false);
        }else{
            professor.setAtivo(this.ativoSelecionado[0]);
        }        
        
        Set<Unidade> unidades = new HashSet<Unidade>();
        
        //For utilizado para varrer os itens selecionados no select de Unidades
        for (int i = 0; i < this.selectedUnidades.size(); i++){                         
            
            Integer codigo = Integer.parseInt(this.selectedUnidades.get(i));
            
            Unidade unidadeProfessor = new Unidade();            
            unidadeProfessor = unidadeDao.getById(codigo);                                  
                        
            unidades.add(unidadeProfessor);            
                                    
            professor.setUnidades(unidades);
        }        
        
        professor.setTipologia(tipologiaDao.getById(this.selectedTipologia));
        
        retorno = professorDAO.atualizar(professor);
        
        resetProfessor();
        
        lista = new ListDataModel(consulta.listaProfessorAtivo(professor));
        
        //getLista();
        
        if(retorno){           
           
            msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Professor atualizado com sucesso!", "");
            FacesContext.getCurrentInstance().addMessage(null, msg);
            
        }                
        
    }    
    
    public void deleteProfessor() {        
        
        professorDAO.excluir(this.professorSelecionado); 
        resetProfessor();
        lista = new ListDataModel(consulta.listaProfessorAtivo(professor));
    }      
    
    public Professor preparaEdicao(){                
        
        //Instancio um arraiy de booleanos e incluo o retorno se o professor a ser editado está ativo ou não
        Boolean[] retornoAtivo = new Boolean[]{this.professorSelecionado.getAtivo()};        
        this.ativoSelecionado = retornoAtivo;                
        
        int contador = 0;
        
        this.selectedUnidades.clear();
        
        for (Iterator iterator = this.professorSelecionado.getUnidades().iterator(); iterator.hasNext();){
            
            Unidade unidade = (Unidade) iterator.next();                                                                 
            
            this.selectedUnidades.add(contador,unidade.getId().toString());            
                        
        }
        
        if(this.professorSelecionado.getTipologia() == null){
            
            getCarregarSelect();
            
        }else{
        
            this.selectedTipologia = this.professorSelecionado.getTipologia().getId();
        
        }
        
        professor = this.professorSelecionado;
        acao = "edicao";
        
        return professor;                
    }
    
    public Professor resetProfessor(){
        acao = "";
        
        populaSelectUnidade();
        getCarregarSelect();
        
        this.selectedTipologia = null;
        
        this.selectedUnidades.clear();
        
        this.professor = new Professor();
        
        System.out.println("Estou resetando o professor");
        
        return this.professor;
    }    
    
    public void listaProfessores(){
        
        if(this.ativoInativo){
            
            lista = new ListDataModel(consulta.listaProfessorAtivo(professor));
        }else{
            
            lista = new ListDataModel(professorDAO.listar(professor));
        }
        
    }
    
    //Getter e Setter
    
    public Professor getProfessor() {
        return professor;
    }

    public void setProfessor(Professor Professor) {
        this.professor = Professor;
    }
    
    
    public DataModel getLista() {
        
        if(lista == null || lista.getRowCount() == 0){
        
                if(this.ativoInativo){

                    lista = new ListDataModel(consulta.listaProfessorAtivo(professor));
                }else{

                    lista = new ListDataModel(professorDAO.listar(professor));
                }        
        
        }
        
        return lista;
    }    
    
    public Boolean[] getAtivoSelecionado() {
        return ativoSelecionado;
    }
    
    public Professor getProfessorSelecionado() {
        return professorSelecionado;
    }

    public void setProfessorSelecionado(Professor professorSelecionado) {
        this.professorSelecionado = professorSelecionado;
    }      

    public void setAtivoSelecionado(Boolean[] ativoSelecionado) {
        
        this.ativoSelecionado = ativoSelecionado;
    }    
    
    public List<String> getSuaLista() {
        return suaLista;
    }

    public void setSuaLista(List<String> suaLista) {
        this.suaLista = suaLista;
    }    
    
    public List<String> getSelectedUnidades() {
        return selectedUnidades;
    }

    public void setSelectedUnidades(List<String> selectedUnidades) {
        this.selectedUnidades = selectedUnidades;
    }    
    
    public Map<String,Integer> getUnidades() {
        return unidades;
    }    
    
    public List<Professor> getFiltered() {        
        return filtered;
    }

    public void setFiltered(List<Professor> filtered) {
        this.filtered = filtered;
    }           

    public Tipologia getTipologia() {
        return tipologia;
    }

    public void setTipologia(Tipologia tipologia) {
        this.tipologia = tipologia;
    }

    public Map<String,Integer> getTipologias() {
        return tipologias;
    }

    public void setTipologias(Map<String,Integer> tipologias) {
        this.tipologias = tipologias;
    }

    public Integer getSelectedTipologia() {
        return selectedTipologia;
    }

    public void setSelectedTipologia(Integer selectedTipologia) {
        this.selectedTipologia = selectedTipologia;
    }

    public boolean isAtivoInativo() {
        return ativoInativo;
    }

    public void setAtivoInativo(boolean ativoInativo) {
        this.ativoInativo = ativoInativo;
    }
    
}

Tenho dúvida se isso está certo: Criteria criteria = sessao.createCriteria(t.getClass()).add(Restrictions.eq("ativo", true)); t é um Object, você deveria fazer um cast para recuperar o a classe certa. Ou seu parametro ser um Class ao invés de um Object.

[code]

listaProfessorAtivo(SuaClasse.class);

public List<Object> listaProfessorAtivo(Class t){
Session sessao = HibernateUtil.getSessionFactory();
LoginController login = new LoginController();
Criteria criteria = sessao.createCriteria(t).add(Restrictions.eq(“ativo”, true));
System.out.println(“Unidades :”+login.Usuario.getUnidades());
criteria.add(Restrictions.in(“unidades”, login.Usuario.getUnidades().toArray()));
List lista = criteria.list();
sessao.close();
return lista;
} [/code]

[quote=romarcio]Tenho dúvida se isso está certo: Criteria criteria = sessao.createCriteria(t.getClass()).add(Restrictions.eq("ativo", true)); t é um Object, você deveria fazer um cast para recuperar o a classe certa. Ou seu parametro ser um Class ao invés de um Object.

[code]

listaProfessorAtivo(SuaClasse.class);

public List<Object> listaProfessorAtivo(Class t){
Session sessao = HibernateUtil.getSessionFactory();
LoginController login = new LoginController();
Criteria criteria = sessao.createCriteria(t).add(Restrictions.eq(“ativo”, true));
System.out.println(“Unidades :”+login.Usuario.getUnidades());
criteria.add(Restrictions.in(“unidades”, login.Usuario.getUnidades().toArray()));
List lista = criteria.list();
sessao.close();
return lista;
} [/code][/quote]

Boa noite amigo, realizei a alteração sugerida, mas infelizmente continua o mesmo o erro. Segue o código alterado:

    public List&lt;Object&gt; listaProfessorAtivo(Class t){
        Session sessao = HibernateUtil.getSessionFactory();
        LoginController login = new LoginController();
        Criteria criteria = sessao.createCriteria(t).add(Restrictions.eq("ativo", true));        
        criteria.add(Restrictions.in("unidades", login.getUsuario().getUnidades().toArray()));
        List lista = criteria.list();
        sessao.close();
        return lista;                        
    }

altere aqui também: criteria.add(Restrictions.in("unidades", login.getUsuario().getUnidades().toArray()));

Você precisa passar um Array de Unidades, então, faça assim:

Unidades[] unidades = login.getUsuario().getUnidades().toArray(new Unidades[login.getUsuario().getUnidades().size()]);
criteria.add(Restrictions.in("unidades", unidades));

[quote=romarcio]altere aqui também: criteria.add(Restrictions.in("unidades", login.getUsuario().getUnidades().toArray()));

Você precisa passar um Array de Unidades, então, faça assim:

Unidades[] unidades = login.getUsuario().getUnidades().toArray(new Unidades[login.getUsuario().getUnidades().size()]); criteria.add(Restrictions.in("unidades", unidades)); [/quote]

Boa tarde amigo romarcio! Muito obrigado pela atenção. Realizei a alteração sugerida, porém não tive sucesso, continua exatamente o mesmo erro. Não sei se chegou a analisar a minha classe Professor, na forma como estou realizando o relacionamento com a classe Unidade pela tabela intermediária “professor_unidade”. Acredito que essa forma possa estar interferindo na criação da consulta. Segue abaixo o código de relacionamento das duas classes:

    @OneToMany(fetch= FetchType.EAGER, cascade= CascadeType.PERSIST)
    @Fetch(FetchMode.SELECT)
        @JoinTable(name = "professor_unidade", joinColumns = {
        @JoinColumn(name = "CD_PROFESSOR")},
    inverseJoinColumns = {
        @JoinColumn(name = "CD_UNIDADE")})
    private Set&lt;Unidade&gt; unidades = new HashSet&lt;Unidade&gt;(0); 

Mais uma vez obrigado.

Eu não costumo usar esse tipo de mapeamento no @OneToMany
Eu faço apenas isso: OneToMany(fetch= FetchType.LAZY, cascade= CascadeType.PERSIST) private Set&lt;Unidade&gt; unidades = new HashSet&lt;Unidade&gt;(0);
A parte do join column eu faço do outro lado no @ManyToOne.

E sim, o problema parece estar nessa consulta, segundo a exceção: Caused by: java.sql.SQLException: No value specified for parameter 2

Faça uma consulta simples, tentando localizar apenas por unidades, talvez seja mais fácil encontrar o problema.

Bom dia amigos, consegui resolver o problema da seguinte maneira:

    public List<Object> listaProfessorAtivo(Class t){
        Session sessao = HibernateUtil.getSessionFactory();
        LoginController login = new LoginController();
        Criteria criteria = sessao.createCriteria(t).add(Restrictions.eq("ativo", true));
        criteria.createAlias("unidades", "p");        
        criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
        criteria.setFetchMode("p.unidades", FetchMode.SELECT);
                        
        List<Integer> integerArray = new ArrayList<Integer>();
        
        for (Iterator iterator = login.Usuario.getUnidades().iterator(); iterator.hasNext();){
            
            Unidade unidade = (Unidade) iterator.next();                     
            
            integerArray.add(unidade.getId());
        
        }        
        
        criteria.add(Restrictions.in("p.id", integerArray));        
        List lista = criteria.list();        
        sessao.close();
        return lista;                        
    }

Obrigado a todos pela ajuda.