Autor
Mensagem
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)
Meu DAOgenerico
Meu singleton
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)
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;
}
}
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));
}
}
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;
}
}
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>
<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>
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
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
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;
}
}
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;
}
}
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
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
#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;
}
}
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>();
Falta fazer alguma coisa com a classe ListaEscola. Todos os DAO's relacionados abaixo.
Agora o que fazer com o ListaEscola, já não sei mais.
#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));
}}
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;
}
}
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);
}
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.
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
protected EntityManager getEntityManager()
{
if (this.em == null) {
this.em = EntityManagerFactorySingleton.getInstance().createEntityManager();
}
// throw new IllegalStateException("Erro");
return this.em;
}
Att Davi
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
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
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
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
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?
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?
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
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
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.
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.
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
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
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;
}
}
@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;
}
}
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
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
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
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
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;
private List<Diario> diarios;
@OneToMany(mappedBy = "cliente", cascade = CascadeType.ALL)
private List<TabPrecos> tabPrecos;
@OneToMany(mappedBy = "clienteVr", cascade = CascadeType.ALL)
private List<VrExtenso> vrExtenso;
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
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
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.
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.
Implementei esse código e agora funciona no console.
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:
MostraEscolaAtiva é meu ManagedBean(MB)
#Código
Query query = getEntityManager().createQuery("select esc.nome from Escola esc");
return (List<Escola>) query.getResultList();
return (List<Escola>) 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
<h:form>
<p:dataList value="#{mostraEscolaAtiva.escolas}" var="escl" type="ordered">
#{escl.nome}
</p:dataList>
</h:form>
<p:dataList value="#{mostraEscolaAtiva.escolas}" var="escl" type="ordered">
#{escl.nome}
</p:dataList>
</h:form>
MostraEscolaAtiva é meu ManagedBean(MB)
#Código
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;
}
}
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;
}
}
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)
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)
Pronto Paulo tow de volta... esse erro já postei a solução:
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;
}
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
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;
}
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
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
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
#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;
}
}
@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();
}
}
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();
}
}
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
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
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.
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
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
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.
<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.
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
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
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.







