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.