DevMedia - asp.net, Java, Delphi, SQL e web Design, tudo em um só lugar!
Bem vindo a DevMedia!
LOGIN:     SENHA:
 
 

Fórum DevMedia


Autor
Mensagem
PJava
 

País: Brasil
Estado: SP
Cidade: Artur
Mensagens: 1424
 Postado em: 4/5/2011 7:00:22 PM

Bem, eu fiz um post que não carrgava a minha lista. Depois percebi que nem sequer ele olhava para o meu MB. Vi que tudo na minha mpáquina estava bugado e o JBoss Tools é que tava criando todo esse problema. Então fiz o seguinte. Apaguei tudo, mas tudo mesmo, menos o projeto. Instalei um novo IDE Eclipse Helios SR2. Então instalei o GlassFish e será com ele que vamos trabalhar. Tentei novamente a listagem, e agora começou a dar erro 404, 500 - por incrível que pareça, fiquei feliz, pois ele agora tá lendo o meu MB. Deixei de usar Annotation e passei a mapear no faces-config. Acontece que minha pouca experiência nisso, não me permite ir removendo o erro. Alguns consigo e outros não. Veja como ficou meu projeto. Alguma coisa veio de exemplo e tenho dificuldade de entender e resolver, é óbvio.
Meu ManagedBean(MB)
#Código
public class MostraEscolaAtiva implements Serializable{
    private static final int List = 0;
    private static final int Escola = 0;
    private List<Escola> escolas;
    private String nm = "Teste";
   
    public static int getList() {
        return List;
    }
    public static int getEscola() {
        return Escola;
    }
    public String getNm() {
        return nm;
    }
    public void setNm(String nm) {
        this.nm = nm;
    }
    public void handleToggle(ToggleEvent event) { 
        FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Fieldset Toggled", "Visibility:" + event.getVisibility());   
        FacesContext.getCurrentInstance().addMessage(null, msg); 
    }    
    public List<Escola> getEscolas() {
        if(escolas.size()==0){   
            escolas = new ListaEscola().findAll();
            if(escolas.size() > 0){
                System.out.println(escolas.size());
            }else{
                System.out.println("A lista está vazia");
            }   
        }  
            return escolas;
    }
    public void setEscolas(List<Escola> escolas) {
        this.escolas = escolas;
    }
}

Meu DAOgenerico
#Código
public class DAOGenerico<T> implements DAO<T> {
   
    private Class<T> classe = null;
    protected EntityManager em = null;
   
    @SuppressWarnings("unchecked")
    public DAOGenerico(EntityManager em) {
        this.classe = (Class<T>) ((ParameterizedType) getClass()
                .getGenericSuperclass()).getActualTypeArguments()[0];
        this.em = em;
    }   
    @Override
    public T atualizar(T entidade) {
        em.merge(entidade);
        return entidade;
    }
    @Override
    public void inserir(T entidade) {
        em.persist(entidade);
    }
    @Override
    public T localizar(Object id) {
        return em.find(this.classe, id);
    }
    @Override
    public void remover(Object id) {
        em.remove(this.localizar(id));
    }
}

Meu singleton
#Código
public class EntityManagerFactorySingleton {
    private static EntityManagerFactory instancia = null;   
    private EntityManagerFactorySingleton() {
       
    }   
    public static EntityManagerFactory getInstance() {
       
        if (instancia == null){
            instancia = Persistence.createEntityManagerFactory("puMosaicoDigital");
        }
        return instancia;       
    }   
}

Meu Facelet(Onde está Escola X, Escola Y e Escola Z, deveria ser listado as Escolas de minha lista. Fiz fora disso pra ver se funfa, mas não funfou. Coloquei um System.out...para ver o que vem e não vi nada na saída, podem reparar no meu MB o System.out.println)
#Código
<div class="boxAzulGrandeMiddle">
                        <ul class="ulMenuDireito">
                            <li><a href="#" title="Escola X" class="lnkOver">Escola X</a></li>
                            <li><a href="#" title="Escola Y">Escola Y</a></li>
                            <li><a href="#" title="Escola Z">Escola Z</a></li>
                        </ul>

PJava
 

País: Brasil
Estado: SP
Cidade: Artur
Mensagens: 1424
 Postado em: 5/5/2011 10:23:51 AM
Tá vindo null e por isso dá erro, ou seja, a página XHTML não sobe.
 
#Código
<h:form>
                    <h:dataTable id="Escola" value="#{mostraEscolaAtiva.escolas}" var="esc">
                        <h:column>
                            <h:outputText value="#{esc.nome}"></h:outputText>
                        </h:column>
                    </h:dataTable>                              
                </h:form>


 
PJava
 

País: Brasil
Estado: SP
Cidade: Artur
Mensagens: 1424
 Postado em: 5/5/2011 10:32:01 AM
Só mais uma. Esse esc.nome(nome é a coluna que me retorna da query) está correto? É assim mesmo que se faz ou não?

 
Davi Gomes da Costa
 
 


País: Brasil
Estado: CE
Cidade: Fortaleza
Mensagens: 1770
 Postado em: 5/5/2011 10:37:24 AM
Está sim.

Mais especificamente o que está vindo null?


Lembra daquele código que fez em uma classe p testar o hibernate e colocou System.out.println(escolas.size());
Hoje em dia esse teste imprime oq?qual valor?


Att Davi

 
PJava
 

País: Brasil
Estado: SP
Cidade: Artur
Mensagens: 1424
 Postado em: 5/5/2011 10:39:57 AM
Parte de minha StackTrace gerada pelo server(GlassFish) é essa.
GRAVE: Error Rendering View[/User/SalaAula/SalaAula.xhtml]
javax.el.ELException: /User/SalaAula/SalaAula.xhtml @60,78 value="#{mostraEscolaAtiva.escolas}": java.lang.NullPointerException
    at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:114)
    at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:194)
    at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:182)
    at javax.faces.component.UIData.getValue(UIData.java:731)
    at javax.faces.component.UIData.getDataModel(UIData.java:1798)
    at javax.faces.component.UIData.setRowIndexWithoutRowStatePreserved(UIData.java:484)
    at javax.faces.component.UIData.setRowIndex(UIData.java:473)
    at com.sun.faces.renderkit.html_basic.TableRenderer.encodeBegin(TableRenderer.java:81)
    at javax.faces.component.UIComponentBase.encodeBegin(UIComponentBase.java:820)
    at javax.faces.component.UIData.encodeBegin(UIData.java:1118)
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1754)
    at javax.faces.render.Renderer.encodeChildren(Renderer.java:168)
    at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:845)
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1756)
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1759)
    at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:401)
    at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:131)
    at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:121)
    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:410)
    at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1534)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:281)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
    at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595)
    at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:98)
    at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:91)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:162)
    at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:326)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:227)
    at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:170)
    at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:822)
    at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:719)
    at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1013)
    at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:225)
    at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)
    at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)
    at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
    at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)
    at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)
    at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)
    at com.sun.grizzly.ContextTask.run(ContextTask.java:71)
    at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)
    at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)
    at java.lang.Thread.run(Thread.java:662)
Caused by: java.lang.NullPointerException
    at br.com.mosaicodigital.controller.MostraEscolaAtiva.getEscolas(MostraEscolaAtiva.java:47)
    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:302)
    at com.sun.faces.el.DemuxCompositeELResolver._getValue(DemuxCompositeELResolver.java:176)
    at com.sun.faces.el.DemuxCompositeELResolver.getValue(DemuxCompositeELResolver.java:203)
    at com.sun.el.parser.AstValue.getValue(AstValue.java:116)
    at com.sun.el.parser.AstValue.getValue(AstValue.java:163)
    at com.sun.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:219)
    at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:109)
    ... 45 more

 
Davi Gomes da Costa
 
 


País: Brasil
Estado: CE
Cidade: Fortaleza
Mensagens: 1770
 Postado em: 5/5/2011 10:51:32 AM
O erro está aki:

MostraEscolaAtiva.getEscolas(MostraEscolaAtiva.java:47)

Posta esse trecho de código, ou o bean inteiro como ele está agora

Att Davi


 
PJava
 

País: Brasil
Estado: SP
Cidade: Artur
Mensagens: 1424
 Postado em: 5/5/2011 11:21:48 AM
public class MostraEscolaAtiva implements Serializable{
    private static final int List = 0;
    private static final int Escola = 0;
    private List<Escola> escolas;
    private String nm = "Teste";
    
    public static int getList() {
        return List;
    }

    public static int getEscola() {
        return Escola;
    }

    public String getNm() {
        return nm;
    }

    public void setNm(String nm) {
        this.nm = nm;
    }

    public void handleToggle(ToggleEvent event) { 
        FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Fieldset Toggled", "Visibility:" + event.getVisibility());   
        FacesContext.getCurrentInstance().addMessage(null, msg); 
    }     
   
    public List<Escola> getEscolas() {
        if(escolas.size()==0){   
            escolas = new ListaEscola().findAll();
            if(escolas.size() > 0){
                System.out.println(escolas.size());
            }else{
                System.out.println("A lista está vazia");
            }   
        }  
            return escolas;
    }

    public void setEscolas(List<Escola> escolas) {
        this.escolas = escolas;
    }
}

 
Davi Gomes da Costa
 
 


País: Brasil
Estado: CE
Cidade: Fortaleza
Mensagens: 1770
 Postado em: 5/5/2011 11:32:44 AM
O erro tá aki:

public List<Escola> getEscolas() {
        if(escolas.size()==0){   
            escolas = new ListaEscola().findAll();
            if(escolas.size() > 0){
                System.out.println(escolas.size());
            }else{
                System.out.println("A lista está vazia");
            }   
        }  
            return escolas;
    }



Escola está null. vc tem que verificar primeiro se está null e inicializar a variável:

if(escolas == null){

     escolas - new ArrayList<Escola>();
}


Só aí vc pode verificar o size e fazer uma chamada escolas.size().

mas uma solução melhor ainda seria iniciar escolar no Construtor, criar um construtor publico e sem paramêtros (ou seja o construtor default) e coloca somente esse trecho de código lá:

escolas - new ArrayList<Escola>();


daí vc pode deixar seu getEscolas como já está



att Davi

 
PJava
 

País: Brasil
Estado: SP
Cidade: Artur
Mensagens: 1424
 Postado em: 5/5/2011 11:58:12 AM
#Código
public class MostraEscolaAtiva implements Serializable{
    private static final int List = 0;
    private static final int Escola = 0;
    private List<Escola> escolas;
    private String nm = "Teste";
    
    public static int getList() {
        return List;
    }

    public static int getEscola() {
        return Escola;
    }

    public String getNm() {
        return nm;
    }

    public void setNm(String nm) {
        this.nm = nm;
    }

    public void handleToggle(ToggleEvent event) { 
        FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Fieldset Toggled", "Visibility:" + event.getVisibility());   
        FacesContext.getCurrentInstance().addMessage(null, msg); 
    }     
   
    public List<Escola> getEscolas() {
        if(escolas.size()==0){   
            escolas = new ListaEscola().findAll();
            if(escolas.size() > 0){
                System.out.println(escolas.size());
            }else{
                System.out.println("A lista está vazia");
            }   
        }  
            return escolas;
    }

    public void setEscolas(List<Escola> escolas) {
        this.escolas = escolas;
    }
}


Isso abaixo tá errado
protected EntityManager getEntityManager() 
    { 
        if (this.em == null) 
            throw new IllegalStateException("Erro"); 
        return this.em; 
    }
Criei um Main para testar no java application e está vindo o erro acima, ou seja, não caonsigo carregar meu EntityManager(em). Ela tá NULL. Acho que é por aí.


Você colocar isso no construtor
escolas = new ArrayList<Escola>();


 
PJava
 

País: Brasil
Estado: SP
Cidade: Artur
Mensagens: 1424
 Postado em: 5/5/2011 12:17:51 PM
Falta fazer alguma coisa com a classe ListaEscola. Todos os DAO's relacionados abaixo.
#Código
public class DAOGenerico<T> implements DAO<T> {    
    private Class<T> classe = null;
    protected EntityManager em = null;    
    @SuppressWarnings("unchecked")
    public DAOGenerico(EntityManager em) {
        this.classe = (Class<T>) ((ParameterizedType) getClass()
                .getGenericSuperclass()).getActualTypeArguments()[0];
        this.em = em;
    }    
    @Override
    public T atualizar(T entidade) {
        em.merge(entidade);
        return entidade;
    }
    @Override
    public void inserir(T entidade) {
        em.persist(entidade);
    }
    @Override
    public T localizar(Object id) {
        return em.find(this.classe, id);
    }
    @Override
    public void remover(Object id) {
        em.remove(this.localizar(id));
    }}

#Código
public class EntityManagerFactorySingleton {
    private static EntityManagerFactory instancia = null;    
    private EntityManagerFactorySingleton() {        
    }    
    public static EntityManagerFactory getInstance() {        
        if (instancia == null){
            instancia = Persistence.createEntityManagerFactory("puMosaicoDigital");
        }
        return instancia;        
    }    
}

#Código
public interface DAO<T> {    
    void inserir(T entidade);
    void remover(Object id);
    T atualizar (T entidade);
    T localizar (Object id);    
}

Agora o que fazer com o ListaEscola, já não sei mais.

 
Davi Gomes da Costa
 
 


País: Brasil
Estado: CE
Cidade: Fortaleza
Mensagens: 1770
 Postado em: 5/5/2011 12:23:57 PM
Nesse código que passou, em nenhum momento vc instanciou EntityManager.
Att Davi

 
Davi Gomes da Costa
 
 


País: Brasil
Estado: CE
Cidade: Fortaleza
Mensagens: 1770
 Postado em: 5/5/2011 12:27:47 PM
Que tal fazer algo parecido com isso:


protected EntityManager getEntityManager() 
    { 
        if (this.em == null)  {
             this.em =
EntityManagerFactory.getInstance().createEntityManager();
        }
           // throw new IllegalStateException("Erro"); 
        return this.em; 
    }

Att Davi

 
Davi Gomes da Costa
 
 


País: Brasil
Estado: CE
Cidade: Fortaleza
Mensagens: 1770
 Postado em: 5/5/2011 12:29:13 PM
Coorigindo altera  EntityManagerFactory   por EntityManagerFactorySingleton, naverdade ficaria assim:



protected EntityManager getEntityManager() 
    { 
        if (this.em == null)  {
             this.em =
EntityManagerFactorySingleton.getInstance().createEntityManager();
        }
           // throw new IllegalStateException("Erro"); 
        return this.em; 
    }




Att Davi




 
PJava
 

País: Brasil
Estado: SP
Cidade: Artur
Mensagens: 1424
 Postado em: 5/5/2011 12:42:05 PM
Eu vi isso e corri já. Acontece que tá dando erro:
unexpected token: on near line 1, column 61 [select distinct e.nome from pessoa p inner join professor f on (p.idpessoa = f.idpessoa) inner join matricula m on (m.idprofessor = f.idprofessor) inner join escola e on (e.idescola = m.idescola)where m.situacao = 'A']
    at org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:616)
E segue uma enorme lista

 
PJava
 

País: Brasil
Estado: SP
Cidade: Artur
Mensagens: 1424
 Postado em: 5/5/2011 12:52:28 PM
Esse é o erro, agora está esse ON
12:39:08,787 ERROR PARSER:33 - line 1:61: unexpected token: on

 
Davi Gomes da Costa
 
 


País: Brasil
Estado: CE
Cidade: Fortaleza
Mensagens: 1770
 Postado em: 5/5/2011 12:53:35 PM
Bom aí é erro de hql.
Pelo stack trace parece que vc está usando sql puro... mas apesar de ser muito parecido hql não é sql.

Eu faria essa consulta com criteria.

http://docs.jboss.org/hibernate/core/3.3/reference/en/html/queryhql.html
http://docs.jboss.org/hibernate/core/3.3/reference/en/html/querycriteria.html


Posta o código onde está a string dessa consulta que eu posto um exemplo de Criteria desse código para vc.

Att Davi


 
PJava
 

País: Brasil
Estado: SP
Cidade: Artur
Mensagens: 1424
 Postado em: 5/5/2011 1:03:29 PM
public List<Escola> findAll() {
        Query query =  getEntityManager().createQuery("select distinct e.nome " +     
                                                       "from " +    
                                                       "pessoa p inner join professor f on (p.idpessoa = f.idpessoa) " +    
                                                       "inner join matricula m on (m.idprofessor = f.idprofessor) " +    
                                                       "inner join escola e on (e.idescola = m.idescola)" +    
                                                       "where m.situacao = 'A'");    
         return (List<Escola>) query.getResultList();    
}
É preciso mapear todas essas entidades? Como eu faço isso?

 
Davi Gomes da Costa
 
 


País: Brasil
Estado: CE
Cidade: Fortaleza
Mensagens: 1770
 Postado em: 5/5/2011 1:12:31 PM
Não tem que mapear nada não, como na sua consulta vc vai retornar só o nome e quer jogar num objeto complexo cheio de atributos?

Vc vai ter que pesquisar mesmo para valer HQL e Criteria.
Sei que está sem tempo com os prazos apertados, mas vc chegou na parte da app mais crucial e mais importante, não tem como não fazer essa parte com carinho e bem feito, pois se sua app nascer com uma base fraca vai lhe dar graves problemas no futuro bem próximo.

Já vou te conceder um código que gera Criteria para ajudar nos primeiros passos:

public Session getSession() {
        return ((Session)entityManager.getDelegate());
    }




public final Criteria createCriteriaExample(Entity example) {
        Criteria executableCriteria = getSession().createCriteria(example.getClass());
       
        return executableCriteria;
    }


Vc usando esse último método sempre que precisar de criteria chama ele e depois trabalha em cima dos métodos que auxiliam nos filtros do criteria.


Att Davi

 
PJava
 

País: Brasil
Estado: SP
Cidade: Artur
Mensagens: 1424
 Postado em: 5/5/2011 2:11:12 PM
Em realidad, preciso mostrar minha lista só isso. Após isso, eu terei uma brecha para melhorar. Mas isso vai pro ar amanhã de manhã, eles nos deram até amanhã. Cara, não vou me entregar. Vou até o fim. Se me demitirem, sem problemas, pelo menos tentei. Por isso a minha pressa. Não enetendi bem o q tem q se fazer. Preciso colocar nervos e cabeça no lugar. Não to conseguindo, por isso dei uma pausa no almoço agora, dei umas voltas e to agora de volta.

 
Davi Gomes da Costa
 
 


País: Brasil
Estado: CE
Cidade: Fortaleza
Mensagens: 1770
 Postado em: 5/5/2011 2:22:09 PM
Posta as entidades matricula, professor, pessoa e escola para te ajudar nessa consulta.

Att Davi

 
Davi Gomes da Costa
 
 


País: Brasil
Estado: CE
Cidade: Fortaleza
Mensagens: 1770
 Postado em: 5/5/2011 2:31:49 PM
De cara para essa consulta, já que só usamos matricula como where, só precisamos de escola e matricula, então na sua entidade escola temos que ter alguma forma de enxergar a lista de matrículas vinculadas a ela, mas manda ai essa entidades que vou ver o q dá p ser feito.

Att Davi 

 
PJava
 

País: Brasil
Estado: SP
Cidade: Artur
Mensagens: 1424
 Postado em: 5/5/2011 2:39:44 PM
A query está correta. Se eu a executo no Postgresql, ela me retorna os registros corretos. Meu problema está no java e no xhtml(esse nem tanto).Não to conseguindo anexar o arquivo.rar que tem meu script do banco inteiro

 
PJava
 

País: Brasil
Estado: SP
Cidade: Artur
Mensagens: 1424
 Postado em: 5/5/2011 2:46:05 PM
Deveria ter criado as classes para matrícula, professor e etc.., certo? Se for isso então tá faltando muita coisa sim. Me dá só um exemplo. Matricula eu tenho no banco: idmatricula,idescola,idprofessor,dtmatricula e situacao. Como eu escreveria essa classe e mapeá-la no hibernate. Por esse exemplo, eu faço as outras.

 
Davi Gomes da Costa
 
 


País: Brasil
Estado: CE
Cidade: Fortaleza
Mensagens: 1770
 Postado em: 5/5/2011 2:59:01 PM
Vamos lápor partes, essa query funciona sim no postgresql sem problemas mas mesmo ela pode ser melhorada basta vc usar essas duas tabelas que citei antes.
Precisa criar essas classes sim, como a tabela que vc passou tem mais de uma chave estrangeira que no caso é para tabela professor, temos que ter a tabela professor...
mas aí isso vira uma bola de neve.. pq professor pode ter outras chaves.
Que tal dar um list all nessa sua consulta...
e deixar o banco configurado conforme sua situação...
pq esse trabalho de mapeamento não é tão simples... tem q implementar todas as dependências...



Att Davi

 
PJava
 

País: Brasil
Estado: SP
Cidade: Artur
Mensagens: 1424
 Postado em: 5/5/2011 3:02:36 PM
Ok, então vamos lá. Essa é minha classe Matricula. É só isso mesmo ou tem mais coisas aí?
#Código
@Entity
@Table(name="matricula")
@SequenceGenerator(name="seq_matricula", sequenceName="matricula_idmatricula_seq", allocationSize=1)
public class Matricula implements Serializable{
   
    @Id
    @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="seq_matricula")
    private long idmatricula;
    private long idprofessor;
    private long idescola;
    private java.util.Calendar dtmatricula;
    private String situacao;
   
   
    public Matricula(){   
    }
   
    public Matricula(long idmatricula,long idprofessor, long idescola,java.util.Calendar dtmatricula,String situacao){
        this.idmatricula = idmatricula;
        this.idprofessor = idprofessor;
        this.idescola    = idescola;
        this.dtmatricula = dtmatricula;
        this.situacao    = situacao;       
    }
   
    public long getIdmatricula() {
        return idmatricula;
    }
    public void setIdmatricula(long idmatricula) {
        this.idmatricula = idmatricula;
    }
    public long getIdprofessor() {
        return idprofessor;
    }
    public void setIdprofessor(long idprofessor) {
        this.idprofessor = idprofessor;
    }
    public long getIdescola() {
        return idescola;
    }
    public void setIdescola(long idescola) {
        this.idescola = idescola;
    }
    public java.util.Calendar getDtmatricula() {
        return dtmatricula;
    }
    public void setDtmatricula(java.util.Calendar dtmatricula) {
        this.dtmatricula = dtmatricula;
    }
    public String getSituacao() {
        return situacao;
    }
    public void setSituacao(String situacao) {
        this.situacao = situacao;
    }
}


 
Davi Gomes da Costa
 
 


País: Brasil
Estado: CE
Cidade: Fortaleza
Mensagens: 1770
 Postado em: 5/5/2011 3:12:20 PM
O problema é que vc está usando um framework de ORM e esta pensando muito como se estivesse programando sem o JPA (Hibernate).....

por exemplo


private long idescola;

deveria ser:

private Escola escola;

A melhor saida para amanhã ainda seria fazer o que te falei.. buscar todas as escola sem filtro nenhum ... chamando akele método da classe genérica que lista todos.

Mandei p seu email... uns exemplos de mapeamentos com hibernate de uma app minha do tempo da facul.... mas vai ser muito útil pvc... e é cheio de exemplos para vc seguir ... com uma pesquisa simples vc acha facil facil.. inclusive akeles links que havia passado do próprio hibernate vão te ajudar....mas na minha experiência esse mapeamento do hibernate tem q ser feito por uma pessoa muito experiente..mas muito mesmo.. por isso.. lista todas as escolas... p vc kebrar a cabeça fim de semana e ver qual a amelhor solução.


att Davi

 
PJava
 

País: Brasil
Estado: SP
Cidade: Artur
Mensagens: 1424
 Postado em: 5/5/2011 3:18:28 PM
Amanhã tenho que mostrar o lista das escolas e não sei como fazer.

 
Davi Gomes da Costa
 
 


País: Brasil
Estado: CE
Cidade: Fortaleza
Mensagens: 1770
 Postado em: 5/5/2011 3:25:23 PM
Deixa tudo do jeito que tá.

Não coloca classe matrícula.. e alterar esse código:

public List<Escola> findAll() {
        Query query =  getEntityManager().createQuery("select distinct e.nome " +     
                                                       "from " +    
                                                       "pessoa p inner join professor f on (p.idpessoa = f.idpessoa) " +    
                                                       "inner join matricula m on (m.idprofessor = f.idprofessor) " +    
                                                       "inner join escola e on (e.idescola = m.idescola)" +    
                                                       "where m.situacao = 'A'");    
         return (List<Escola>) query.getResultList();    
}




para esse:

public List<Escola> findAll() {
        Query query =  getEntityManager().createQuery("select esc from Escola esc");    
         return (List<Escola>) query.getResultList();    
}



testa e diz se deu algum erro


att Davi

 
PJava
 

País: Brasil
Estado: SP
Cidade: Artur
Mensagens: 1424
 Postado em: 5/5/2011 3:40:03 PM
No seu exemplo vc colou isso aí. Eu sei que é uma relacionamento, mas não sei o que são esses campos dentro das aspas, se são Foreign Key ou o que são.
#Código
@OneToMany(mappedBy = "clientes", cascade = CascadeType.ALL)
    private List<Diario> diarios;

    @OneToMany(mappedBy = "cliente", cascade = CascadeType.ALL)
    private List<TabPrecos> tabPrecos;

    @OneToMany(mappedBy = "clienteVr", cascade = CascadeType.ALL)
    private List<VrExtenso> vrExtenso;


 
Davi Gomes da Costa
 
 


País: Brasil
Estado: CE
Cidade: Fortaleza
Mensagens: 1770
 Postado em: 5/5/2011 3:49:33 PM
Eu ainda continuaria tentando deixar akele estratégia sócom a classe Escola para deixar ela prota caso vc não consiga até amanhã desenrolar esse mapeamento.. que não é nenhum pouco simples.. paramim é a parte mais difícil de se usar hibernate e JPA.

Mas vamos ao que vc perguntou:



@OneToMany(mappedBy = "clientes", cascade = CascadeType.ALL)
    private List<Diario> diarios;


mappedBy quer dizer que esse relacionamento foi feito em outra entidade. Isso quer dizer também que nessa outra entidade que foi feito esse mapeamento provavelmente a classe Diario tem o atributo que deve ser clientes... confere aí
@OnetoMany quer dizer que a classe (entidade) que contêm esse código tem o relacionamento de um para muitos com Diario.



Att Davi


 
Davi Gomes da Costa
 
 


País: Brasil
Estado: CE
Cidade: Fortaleza
Mensagens: 1770
 Postado em: 5/5/2011 3:52:59 PM
A noite qdo chegar em casa, vou te passar um material que fiz para a última turma de trainees aqui da minha empresa sobre hibernate e jsf.. apesar da versão dojsf ser 1.2, mas da para vc adaptar a sua necessidade.


Att Davi

 
PJava
 

País: Brasil
Estado: SP
Cidade: Artur
Mensagens: 1424
 Postado em: 5/5/2011 4:14:59 PM
Então, de qual estratégia que vc fala. Ainda não entendi. Cara, tá tão confuso pra mim agora, que não sei mais o que fazer. Tem hora que eu nem sei onde estou, sério mesmo.

 
PJava
 

País: Brasil
Estado: SP
Cidade: Artur
Mensagens: 1424
 Postado em: 5/5/2011 4:51:12 PM
Comecei a mapear e veja o novo erro que deu, mas ainda não resolvi a questão do SQL ou HQL.
16:49:15,505  WARN AnnotationBinder:544 - Illegal use of @Table in a subclass of a SINGLE_TABLE hierarchy: br.com.mosaicodigital.modelo.Professor

 
PJava
 

País: Brasil
Estado: SP
Cidade: Artur
Mensagens: 1424
 Postado em: 5/5/2011 6:49:48 PM
Com esse código aqui, ele no Java Application me retorna todas as escolas listadas lá. Porem na WEB não, continua me retornando NullPointerException. O Código abaixo:

public List<Escola> findAll() {
        Query query =  getEntityManager().createQuery("select esc from Escola esc");    
         return (List<Escola>) query.getResultList();    
}

Com esse código me retorna no console.

 
PJava
 

País: Brasil
Estado: SP
Cidade: Artur
Mensagens: 1424
 Postado em: 5/5/2011 7:37:51 PM
Implementei esse código e agora funciona no console.
#Código
Query query =  getEntityManager().createQuery("select esc.nome from Escola esc");    
             return (List&lt;Escola&gt;) query.getResultList();   


Porem quando eu chamo na página, dá erro de NullPointerException. Veja o código de chamada na página:

E o código dfe chamada na página:
#Código
&lt;h:form&gt;
                    &lt;p:dataList value="#{mostraEscolaAtiva.escolas}" var="escl" type="ordered"&gt;
                      #{escl.nome}
                    &lt;/p:dataList&gt;
                                                 
                &lt;/h:form&gt;


MostraEscolaAtiva é meu ManagedBean(MB)
#Código
public class MostraEscolaAtiva implements Serializable{
    private List&lt;Escola&gt; escolas;
    private String nm = "Teste";
    public String getNm() {
        return nm;
    }
    public void setNm(String nm) {
        this.nm = nm;
    }
    public void handleToggle(ToggleEvent event) { 
        FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Fieldset Toggled", "Visibility:" + event.getVisibility());   
        FacesContext.getCurrentInstance().addMessage(null, msg); 
    }        
    public List&lt;Escola&gt; getEscolas() {
        if(escolas.size() == 0){   
            escolas = new ListaEscola().findAll();
            if(escolas.size() &gt; 0){
                System.out.println(escolas.size());
            }else{
                System.out.println(&quot;A lista está vazia&quot;);
            }   
        }  
            return escolas;
    }
    public void setEscolas(List&lt;Escola&gt; escolas) {
        this.escolas = escolas;
    }
}


 
PJava
 

País: Brasil
Estado: SP
Cidade: Artur
Mensagens: 1424
 Postado em: 5/5/2011 8:56:37 PM
O log do GlassFish

Caused by: java.lang.NullPointerException
    at br.com.mosaicodigital.controller.MostraEscolaAtiva.getEscolas(MostraEscolaAtiva.java:40)
    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:302)
    at com.sun.faces.el.DemuxCompositeELResolver._getValue(DemuxCompositeELResolver.java:176)
    at com.sun.faces.el.DemuxCompositeELResolver.getValue(DemuxCompositeELResolver.java:203)
    at com.sun.el.parser.AstValue.getValue(AstValue.java:116)
    at com.sun.el.parser.AstValue.getValue(AstValue.java:163)
    at com.sun.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:219)
    at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:109)
    ... 42 more

AVISO: StandardWrapperValve[Faces Servlet]: PWC1406: Servlet.service() for servlet Faces Servlet threw exception
java.lang.NullPointerException
    at br.com.mosaicodigital.controller.MostraEscolaAtiva.getEscolas(MostraEscolaAtiva.java:40)

 
Davi Gomes da Costa
 
 


País: Brasil
Estado: CE
Cidade: Fortaleza
Mensagens: 1770
 Postado em: 5/5/2011 9:01:16 PM
Pronto Paulo tow de volta... esse erro já postei a solução:

public List&lt;Escola&gt; getEscolas() {
        if(escolas.size() == 0){   
            escolas = new ListaEscola().findAll();
            if(escolas.size() &gt; 0){
                System.out.println(escolas.size());
            }else{
                System.out.println(&quot;A lista está vazia&quot;);
            }   
        }  
            return escolas;
    }



o null pointer é ai:

que verificar se escolas está nulo antes de chamar escolas.size(), se escola está null.... não tem como executar nenhum método dele.



Att Davi

 
Davi Gomes da Costa
 
 


País: Brasil
Estado: CE
Cidade: Fortaleza
Mensagens: 1770
 Postado em: 5/5/2011 9:04:24 PM
Não use esse código, vc está retornando uma lista de nome....
qdo vc for fazer um cast para entidade escola vai dar erro... no console funcionou, mas qdo vc foir iusar seu código para valer  vai dar erro. Não deu erro pq no console vc não fez cast para uma lista de escolas.

Volte a usar:

public List<Escola> findAll() {
        Query query =  getEntityManager().createQuery("select esc from Escola esc");    
         return (List<Escola>) query.getResultList();    
}


A estratégia que eu falava.. é só deixar a classe Escola até funcionar.. depois vc mapeia as outras entidades.

att Davi

 
PJava
 

País: Brasil
Estado: SP
Cidade: Artur
Mensagens: 1424
 Postado em: 6/5/2011 8:40:05 AM
Davi, tem um porem aí. Se eu rodo no console(Java Application),usando essa mesma estratégia, eu tenho a lista de escolas. Porem se rodo na Web, dá o erro de NullPointerException. Só em ambiente WEB.

 
PJava
 

País: Brasil
Estado: SP
Cidade: Artur
Mensagens: 1424
 Postado em: 6/5/2011 8:45:24 AM
#Código
@ManagedBean(name="MostraEsc")
@ViewScoped
public class MostraEscolaAtiva implements Serializable{
    private List<Escola> escolas;
    private String nm = "Teste";

    public String getNm() {
        return nm;
    }

    public void setNm(String nm) {
        this.nm = nm;
    }

    public void handleToggle(ToggleEvent event) {  
        FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Fieldset Toggled", "Visibility:" + event.getVisibility());    
        FacesContext.getCurrentInstance().addMessage(null, msg);  
    }      
    
    public List<Escola> getEscolas() {
        if(escolas.size() == 0){   
            escolas = new ListaEscola().findAll();
            if(escolas.size() > 0){
                System.out.println(escolas.size());
            }else{
                System.out.println("A lista está vazia");
            }   
        }  
            return escolas;
    }

    public void setEscolas(List<Escola> escolas) {
        this.escolas = escolas;
    }
}


#Código
public class ListaEscola {
    private List<Escola> escola;
     private EntityManager em;  
     private String nm = "Teste";
   
    public List<Escola> getEscola() {
        return escola;
    }

    public String getNm() {
        return nm;
    }

    public void setNm(String nm) {
        this.nm = nm;
    }

    public void setEscola(List<Escola> escola) {
        this.escola = escola;
    }
   
    public EntityManager getEm() { 
        return em; 
    } 
    public void setEm(EntityManager em) { 
        this.em = em; 
    } 
   
    protected EntityManager getEntityManager()
    {
   
        if (this.em == null)  {
            this.em = EntityManagerFactorySingleton.getInstance().createEntityManager();
        }// throw new IllegalStateException("Erro");     
        return this.em;
    }
   
    /*public Session getSession() {
        EntityManager entityManager;
        return ((Session)entityManager.getDelegate());
    }

     public final Criteria createCriteriaExample(Entity example) {
        Criteria executableCriteria = getSession().createCriteria(example.getClass());
      
        return executableCriteria;
    }*/

    public List<Escola> findAll() {
        /*Query query =  getEntityManager().createQuery("select distinct e.nome from " +       
                                                      "pessoa p, professor f, mtricula m, escola e " + 
                                                      "where p.idpessoa = f.idpessoa and m.idprofessor = f.idprofessor " +       
                                                      "and e.idescola = m.idescola and m.situacao = 'A'"); */
           
        Query query =  getEntityManager().createQuery("select esc.nome from Escola esc");   
             return (List<Escola>) query.getResultList();   
       
        //return (List<Escola>) query.getResultList();   
}
   
}


 
Davi Gomes da Costa
 
 


País: Brasil
Estado: CE
Cidade: Fortaleza
Mensagens: 1770
 Postado em: 6/5/2011 8:50:41 AM
Faça isso:

public List<Escola> getEscolas() {
        if(escolas == null){   
            escolas = new ListaEscola().findAll();
            if(escolas.size() > 0){
                System.out.println(escolas.size());
            }else{
                System.out.println("A lista está vazia");
            }   
        }  
            return escolas;
    }





Que vai funcionar

 
Davi Gomes da Costa
 
 


País: Brasil
Estado: CE
Cidade: Fortaleza
Mensagens: 1770
 Postado em: 6/5/2011 8:52:54 AM
Senão me engano já tinha corrigido.. isso..
pela query do jeito que dá qdo testar.. vai voltar aquele erro de query..
por isso digo.. deixe a query select esc from Escola esc...
Que vai rolar direitinho...
se colocar select esc.nome from Escola.. vai retornar uma lista de String... e na sua página vc chama uma lista de Escola.. vai dar erro.. pode testar aí..


Att Davi

 
PJava
 

País: Brasil
Estado: SP
Cidade: Artur
Mensagens: 1424
 Postado em: 6/5/2011 8:59:32 AM
Agora ok. Como eu mudei o select, está dando erro de que ele não encontra a propriedade nome:
javax.servlet.ServletException: /User/SalaAula/SalaAula.xhtml: The class 'java.lang.String' does not have the property 'nome'.

root cause

Assim está na página para chamar a lista

<p:dataList value="#{mostraEscolaAtiva.escolas}" var="escl" type="ordered">
                        #{escl.nome}
                    </p:dataList>   

E assim tá no meu método de pesquisa

public List<Escola> findAll() {
               
        Query query =  getEntityManager().createQuery("select esc.nome from Escola esc");   
             return (List<Escola>) query.getResultList(); 

Mesmo assim, não trago nada.


 
Davi Gomes da Costa
 
 


País: Brasil
Estado: CE
Cidade: Fortaleza
Mensagens: 1770
 Postado em: 6/5/2011 9:08:38 AM
Te disse que ia dar erro, com esse método

public List<Escola> findAll() {
               
        Query query =  getEntityManager().createQuery("select esc.nome from Escola esc");   
             return (List<Escola>) query.getResultList();


Você retorno uma lista de String...
vc deve fazer :

public List<Escola> findAll() {
               
        Query query =  getEntityManager().createQuery("select esc from Escola esc");   
             return (List<Escola>) query.getResultList();


Deixa assim que vai funfar

Att Davi

 
PJava
 

País: Brasil
Estado: SP
Cidade: Artur
Mensagens: 1424
 Postado em: 6/5/2011 9:22:46 AM
Assim funciona, só não lista na web. Eu coloquei esc.nome, porque só me interessa o nome, porem não sei como listá-los na web, daquela forma que eu gte passei. Aqui não aperece:
<p:dataList value="#{mostraEscolaAtiva.escolas}" var="escl" type="ordered">
                        #{escl.nome}
                    </p:dataList>
Eu não sei que atributo colocar lá(esc.nome),pois eu precisoi apenas do nome. Só não funciona na WEB, pois no application funfa.

 
Davi Gomes da Costa
 
 


País: Brasil
Estado: CE
Cidade: Fortaleza
Mensagens: 1770
 Postado em: 6/5/2011 9:24:37 AM
Só lembrando esse select é hql e não sql puro...nativo..
vai ter que dar uma olhada nakeles links q te passei do hibernate.

Att Davi

 
Davi Gomes da Costa
 
 


País: Brasil
Estado: CE
Cidade: Fortaleza
Mensagens: 1770
 Postado em: 6/5/2011 9:30:35 AM
Vc trocou a query que vc postou por essa:

select esc from Escola esc

na classe Escola tem o atributo nome (private String nome)?

na sua página escl.nome tem que bater com
(private String nome).

só mis uma dica, esse seleect do hql
select esc from Escola esc

o q ele faz?

ele busca dobanco todos as colunas e coloca no objeto Escola em todos seus atributos... daí vc pode usar na sua página:

<p:dataList value="#{mostraEscolaAtiva.escolas}" var="escl" type="ordered">
                        #{escl.nome}
                    </p:dataList>

ou


<p:dataList value="#{mostraEscolaAtiva.escolas}" var="escl" type="ordered">
                        #{escl.idescola}
                    </p:dataList>




Frameworks de ORM como jpa e hibernate, ajudam o meio de campo do mundo OO com banco de dados.

Att Davi

 
PJava
 

País: Brasil
Estado: SP
Cidade: Artur
Mensagens: 1424
 Postado em: 6/5/2011 9:40:45 AM
Consegui listar as escolas na web. Agora só falta fazer um for e não sei como fazer, para ir colocando as escolas em uma determinada posição, mas isso vou abrir em outra thread.

 
Davi Gomes da Costa
 
 


País: Brasil
Estado: CE
Cidade: Fortaleza
Mensagens: 1770
 Postado em: 6/5/2011 9:45:49 AM
Show de bola cara.
Eu sabia que a gente ia chegar lá

Att Davi

 
PJava
 

País: Brasil
Estado: SP
Cidade: Artur
Mensagens: 1424
 Postado em: 6/5/2011 9:52:00 AM
Obrigado mesmo por tudo que vc tem feito. Ainda falta algumas coisas, mas hoje terei que publicar isso. O que tá matando é o SCRUM. Ele é cruel. Tenho que publicar algo hoje. Mas cara, obrigado. Pela paciência e disponibilidade para isso. Se eu publicar hoje, garanto meu posto e vou btranquilo pra casa. Vou estudar esse fim de semana todo, HQL, JSF, pois tá f.. pra mim sem esses conhecimentos.

 
web-03
DevMedia  |  Anuncie  |  Fale conosco
Hospedagem web por Porta 80 Web Hosting
2013 - Todos os Direitos Reservados a web-03