Esse é o erro que dá, quando eu vou redirecionar para uma nova página
javax.servlet.ServletException: org.apache.catalina.session.StandardSessionFacade cannot be cast to br.com.mosaicodigital.modelo.HttpSession
root cause
java.lang.ClassCastException: org.apache.catalina.session.StandardSessionFacade cannot be cast to br.com.mosaicodigital.modelo.HttpSession
Não sei o que fazer com essa classe. Essa classe tá aí, porque o eclipse reclamou e sugeriu criar
Esse é o código que fiz e carreguei para pegar o usuário logado.
publicFacesContextgetFacesContext(){
returnFacesContext.getCurrentInstance();}publicHttpSessiongetSession(){
return(HttpSession)getFacesContext().getExternalContext().getSession(false);}publicList<Escola> findAll() { Loginusuario=(Login)getSession().getAttribute("LoginControle");Queryquery=getEntityManager().createQuery("select distinct esc from Escola esc ,Matricula mat"+" where mat.idescola = esc.idescola"+" and mat.idpessoa = "+usuario.getPessoa().getIdPessoa()+" and mat.situacao = 'A' order by esc.nome"); return(List<Escola>) query.getResultList(); }
Eu nunca fiz nada com login, nunca peguei usuário logado, essa é minha dúvida. Em delphi é bem diferente.
P
pjava
A classe que pega o usuário logado. Agora o que fazer no meu MB?
publicclassListaEscola{privateList<Escola>escola;privateEntityManagerem;publicList<Escola>getEscola(){returnescola;}publicvoidsetEscola(List<Escola>escola){this.escola=escola;}publicEntityManagergetEm(){returnem;}publicvoidsetEm(EntityManagerem){this.em=em;}protectedEntityManagergetEntityManager(){if(this.em==null){this.em=EntityManagerFactorySingleton.getInstance().createEntityManager();}// throw new IllegalStateException("Erro"); returnthis.em;}/*public Session getSession() { EntityManager entityManager; return ((Session)entityManager.getDelegate()); } public final Criteria createCriteriaExample(Entity example) { Criteria executableCriteria = getSession().createCriteria(example.getClass()); return executableCriteria; }*/publicFacesContextgetFacesContext(){returnFacesContext.getCurrentInstance();}publicHttpSessiongetSession(){return(HttpSession)getFacesContext().getExternalContext().getSession(false);}publicList<Escola>findAll(){Loginusuario=(Login)getSession().getAttribute("LoginControle");Queryquery=getEntityManager().createQuery("select distinct esc from Escola esc ,Matricula mat"+" where mat.idescola = esc.idescola"+" and mat.idpessoa = "+usuario.getPessoa().getIdPessoa()+" and mat.situacao = 'A' order by esc.nome");return(List<Escola>)query.getResultList();}}
P
pjava
To fazendo uma salada tremenda. Em realidade na classe login eu só tenho a validação do login. Essa classe aqui em baixo, acho é que eu deveria pegar o id do usuário, certo?
publicclassLoginDAOextendsDAOGenerico<Login>{publicLoginDAO(EntityManagerem){super(em);}@SuppressWarnings("unchecked")publicList<Login>buscaLogin(StringloginProcurado){em.getTransaction().begin();Queryq=em.createQuery("from Login l where l.login = :loginProcurado");q.setParameter("loginProcurado",loginProcurado);List<Login>listaLogin=q.getResultList();em.getTransaction().commit();returnlistaLogin;}}
P
pjava
Nada funciona aqui. Uma luz me daria uns 10 pontos com meu chefe
P
pjava
Eu e um colega aqui trabalhamos juntos e na máquina dele não dá esse erro e na minha dá.
javax.servlet.ServletException: javax.persistence.PersistenceException: org.hibernate.AnnotationException: Unknown Id.generator: seq_escola
root cause
javax.faces.el.EvaluationException: javax.persistence.PersistenceException: org.hibernate.AnnotationException: Unknown Id.generator: seq_escola
root cause
Agora isso só aconteceu depois de eu tentar pegar o usuário logado e tive que fazer uma alteração assim:
publicList<Escola> findAll() {List<Escola> listEscola = null;try{
HttpSessionsession=(HttpSession)FacesContext.getCurrentInstance().getExternalContext().getSession(false);LoginControleloginControle=(LoginControle)session.getAttribute("LoginControle");Loginlogin=loginControle.getLogin();em.getTransaction().begin();Queryquery=em.createQuery("select distinct esc from Escola esc ,Matricula mat"+" where mat.idescola = esc.idescola"+" and mat.idpessoa = 1 "+//login.getPessoa().getIdPessoa()+" and mat.situacao = 'A' order by esc.nome"); listEscola=query.getResultList();em.getTransaction().commit();}catch(Exceptione){
e.printStackTrace();if(em.getTransaction().isActive()){
em.getTransaction().rollback();}
}finally{
em.close();}
returnlistEscola; }
Antes era assim:
publicList<Escola> findAll() {Queryquery=getEntityManager().createQuery("select distinct esc from Escola esc ,Matricula mat"+" where mat.idescola = esc.idescola"+" and mat.idpessoa = 1 "+" and mat.situacao = 'A' order by esc.nome"); return(List<Escola>) query.getResultList(); }
Agora nenhum e nem outro e até o GlassFish começou a dar pau. É muito para mim.
B
bgomes
Olá
view plaincopy to clipboardprint?
javax.servlet.ServletException: javax.persistence.PersistenceException: org.hibernate.AnnotationException: Unknown Id.generator: seq_escola
root cause
javax.faces.el.EvaluationException: javax.persistence.PersistenceException: org.hibernate.AnnotationException: Unknown Id.generator: seq_escola
root cause
Neste seu teste a sua maquina e de seu colega estavam apontando para o mesmo banco ?!? Pois o log aponta não encontrar a sequence “seq_escola”;
Outra coisa não sei o motivo que levou voce mudar seu select, mas na forma que estava antes funcionaria normalmente. Outra coisa até onde lembro operações de select não necessitam que voce inicie uma “transação” de “commit” ou “rollback”.
A proposito seu select esta fixado na busca como o mat.idpessoa = 1, é isto mesmo que deseja ??
publicList<Escola>findAll(){Queryquery=getEntityManager().createQuery("select distinct esc from Escola esc ,Matricula mat"+" where mat.idescola = esc.idescola"+" and mat.idpessoa = 1 "+" and mat.situacao = 'A' order by esc.nome"); return(List<Escola>)query.getResultList(); }
P
pjava
1 era só o teste, em realidade eu preciso é do usuário logado no sistema. Ao invés do 1 eu pego o ID do usuário.
Nykolas_Lima
Apaga essa classe HttpSession que você criou.
Vai nas suas outras classes e troca o import “br.com.mosaicodigital.modelo.HttpSession” por “javax.servlet.http.HttpSession”.
O problema de compilação deve ser porque você apagou sua classe HttpSession, mas seus imports ainda estavam apontando para ela.
P
pjava
Com esse método aqui tá pegando o usuário. Acontece que na página a lista vem vazia, mas a query que eu peguei pelo log do GlassFish, está correto. Não estou conseguindo debugar, colocar um break.
List<Escola> listEscola = null;try{
HttpSessionsession=(HttpSession)FacesContext.getCurrentInstance().getExternalContext().getSession(false);LoginControleloginControle=(LoginControle)session.getAttribute("LoginControle");Loginlogin=loginControle.getLogin();//em.getTransaction().begin();Stringcomando="select distinct esc from Escola esc ,Matricula mat"+" where mat.idescola = esc.idescola"+" and mat.idpessoa = "+login.getPessoa().getIdPessoa()+" and mat.situacao = 'A' order by esc.nome"; Queryquery=em.createQuery(comando); listEscola=query.getResultList();}catch(Exceptione){
e.printStackTrace();//if(em.getTransaction().isActive()){
//em.getTransaction().rollback();//}
}finally{
em.close();}returnlistEscola; }
P
pjava
Aqui tá vindo NULL, pois eu debuguei e foi isso q encontrei.
Query query = em.createQuery(comando);
listEscola = query.getResultList();
Assim chamo o em
private EntityManager em = EntityManagerFactorySingleton.getInstance().createEntityManager();