Problema com consulta em JPA

4 respostas
jaissonduarte

oi pessoal
estou com um problema com minhas consultas em JPA (por favor não falem mal do JPA , é que já peguei ele e não posso largar :D )

minhas classes estão assim: classe área:
package modelo;

import java.io.Serializable;
import java.util.List;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;

@Entity
@Table(name = "area")
@XmlRootElement
@NamedQueries({
    @NamedQuery(name = "Area.findAll", query = "SELECT a FROM Area a"),
    @NamedQuery(name = "Area.findByCodigo", query = "SELECT a FROM Area a WHERE a.codigo = :codigo"),
    @NamedQuery(name = "Area.findByDescricao", query = "SELECT a FROM Area a WHERE a.descricao = :descricao")})
public class Area implements Serializable {
    private static final long serialVersionUID = 1L;
    public static final String pesquisarDescricao="Area.findByDescricao";
    @Id
    @Basic(optional = false)
    @NotNull
    @Column(name = "codigo")
    private Integer codigo;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 30)
    @Column(name = "descricao")
    private String descricao;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "codArea")
    private List<Curso> cursoList;

    public Area() {
    }

    /*gets e set*/
   
    @Override
    public String toString() {
        return "modelo.Area[ codigo=" + codigo + " ]";
    }    
}

notem que o que eu preciso para fazer a consulta é só da @NamedQuery para a consulta que está na constante pesquisarDescricao;

mas quando eu vou para a outra classe classe documento:
@Entity
@Table(name = "documento")
@XmlRootElement
@NamedQueries({
    @NamedQuery(name = "Documento.findAll", query = "SELECT d FROM Documento d"),
    @NamedQuery(name = "Documento.findByCodigo", query = "SELECT d FROM Documento d WHERE d.codigo = :codigo"),
    @NamedQuery(name = "Documento.findByResumo", query = "SELECT d FROM Documento d WHERE d.resumo = :resumo"),
    @NamedQuery(name = "Documento.findByTipo", query = "SELECT d FROM Documento d WHERE d.tipo = :tipo"),
    @NamedQuery(name = "Documento.findByAno", query = "SELECT d FROM Documento d WHERE d.ano = :ano"),
    @NamedQuery(name = "Documento.findByTitulo", query = "SELECT d FROM Documento d WHERE d.titulo = :titulo"),
    @NamedQuery(name = "Documento.findByCaminho", query = "SELECT d FROM Documento d WHERE d.caminho = :caminho")})
public class Documento implements Serializable {
    public static final String pesquisarDocumento="Documento.findByTitulo";
    private static final long serialVersionUID = 1L;
    @Id
    @Basic(optional = false)
    @NotNull
    @Column(name = "codigo")
    private Integer codigo;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = [telefone removido])
    @Column(name = "resumo")
    private String resumo;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 30)
    @Column(name = "tipo")
    private String tipo;
    @Basic(optional = false)
    @NotNull
    @Column(name = "ano")
    private int ano;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = [telefone removido])
    @Column(name = "titulo")
    private String titulo;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = [telefone removido])
    @Column(name = "caminho")
    private String caminho;
    @JoinTable(name = "documento_palavra", joinColumns = {
        @JoinColumn(name = "cod_documento", referencedColumnName = "codigo")}, inverseJoinColumns = {
        @JoinColumn(name = "cod_palavra", referencedColumnName = "codigo")})
    @ManyToMany
    private List<PalavraChave> palavraChaveList;
    @JoinColumn(name = "cod_instituicao", referencedColumnName = "codigo")
    @ManyToOne(optional = false)
    private Instituicao codInstituicao;
    @JoinColumn(name = "cod_curso", referencedColumnName = "codigo")
    @ManyToOne(optional = false)
    private Curso codCurso;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "documento")
    private List<DocumentoAutor> documentoAutorList;

    public Documento() {
    }
/* gets e set*/
}

não funciona minhas consultas

vejam como esta minhas consultas:
@Stateless
public class AreaDAO {

    @PersistenceContext(name = "pesquisaDocumentoPU")
    private EntityManager em;
    private Area area;

    public List<Area> pesquisar(String descricao) {
        List<Area> resultado = null;
        try {
            Query consulta = em.createNamedQuery(Area.pesquisarDescricao);
            consulta.setParameter("descricao", descricao);
            resultado = consulta.getResultList();
        } catch (Exception e) {
            System.out.println("não deu hehehe: " + e.getMessage());
        }
        return resultado;
    }
}
meu ManagedBeans
@ManagedBean(name = "areaMB")
@RequestScoped
public class AreaMB {

    @EJB
    private AreaFacade areaFacade;
    private Area area;
    private List<Area> areas;

    public Area getArea() {
        if (area == null) {  
            area = new Area();  
        }  
        return area;
    }

    public void setArea(Area area) {
        this.area = area;
    }

    public List<Area> getAreas() {
        return areas;
    }

    public void setAreas(List<Area> areas) {
        this.areas = areas;
    }
    

    public String pesquisar() {
        try {
            if (areaFacade.pesquisarArea(area.getDescricao()) != null) {
                areas = areaFacade.pesquisarArea(area.getDescricao());
            }
        } catch (Exception e) {
            return "Erro";
        }
        return "Resultado";
    }
}
minhas telas de JSF pesquisar area:
<h:body>
        <h:form>
            <h:outputText for="descricao" value="Descrição"/><br/>
            <h:inputText id="descricao" value="#{areaMB.area.descricao}" required="true"/><br/>
            <h:commandLink value="pesquisar" action="#{areaMB.pesquisar()}"/>            
        </h:form>
    </h:body>
resultado
<h:body>
        <h:form>  
            <h:dataTable value="#{areaMB.areas}" var="area">  
                <h:column>  
                    <h:outputText value="#{area.descricao}"/>  
                </h:column>  
            </h:dataTable>  
        </h:form>
    </h:body>

isso se repete para documento mas quando executo o documento acontece isso:


An Error Occurred:
Um erro ocorreu ao realizar a injeção de recurso no bean gerenciado documentoMB

com.sun.faces.mgbean.ManagedBeanCreationException: Um erro ocorreu ao realizar a injeção de recurso no bean gerenciado documentoMB
at com.sun.faces.mgbean.BeanBuilder.injectResources(BeanBuilder.java:211)
at com.sun.faces.mgbean.BeanBuilder.build(BeanBuilder.java:103)
at com.sun.faces.mgbean.BeanManager.createAndPush(BeanManager.java:409)
at com.sun.faces.mgbean.BeanManager.create(BeanManager.java:269)
at com.sun.faces.el.ManagedBeanELResolver.resolveBean(ManagedBeanELResolver.java:244)
at com.sun.faces.el.ManagedBeanELResolver.getValue(ManagedBeanELResolver.java:116)
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.AstIdentifier.getValue(AstIdentifier.java:103)
at com.sun.el.parser.AstValue.getValue(AstValue.java:179)
at com.sun.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:224)
at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:109)
at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:194)
at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:182)
at javax.faces.component.UIOutput.getValue(UIOutput.java:169)
at com.sun.faces.renderkit.html_basic.HtmlBasicInputRenderer.getValue(HtmlBasicInputRenderer.java:205)
at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.getCurrentValue(HtmlBasicRenderer.java:355)
at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeEnd(HtmlBasicRenderer.java:164)
at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:875)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1764)
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:1757)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1760)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1760)
at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:402)
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:594)
at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1542)
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 org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:161)
at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:331)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231)
at com.sun.enterprise.v3.services.impl.ContainerMapper$AdapterCallable.call(ContainerMapper.java:317)
at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:195)
at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:849)
at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:746)
at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1045)
at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:228)
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:722)
Caused by: com.sun.faces.spi.InjectionProviderException: com.sun.enterprise.container.common.spi.util.InjectionException: Exceção ao tentar injetar Remote ejb-ref name=managedBeans.DocumentoMB/documento,Remote 3.x interface =modelo.Documento,ejb-link=null,lookup=,mappedName=,jndi-name=modelo.Documento,refType=Session em class managedBeans.DocumentoMB: Lookup failed for 'java:comp/env/managedBeans.DocumentoMB/documento' in SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs=com.sun.enterprise.naming}
at org.glassfish.faces.integration.GlassFishInjectionProvider.inject(GlassFishInjectionProvider.java:194)
at com.sun.faces.mgbean.BeanBuilder.injectResources(BeanBuilder.java:205)
... 54 more
Caused by: com.sun.enterprise.container.common.spi.util.InjectionException: Exceção ao tentar injetar Remote ejb-ref name=managedBeans.DocumentoMB/documento,Remote 3.x interface =modelo.Documento,ejb-link=null,lookup=,mappedName=,jndi-name=modelo.Documento,refType=Session em class managedBeans.DocumentoMB: Lookup failed for 'java:comp/env/managedBeans.DocumentoMB/documento' in SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs=com.sun.enterprise.naming}
at com.sun.enterprise.container.common.impl.util.InjectionManagerImpl._inject(InjectionManagerImpl.java:703)
at com.sun.enterprise.container.common.impl.util.InjectionManagerImpl.inject(InjectionManagerImpl.java:470)
at com.sun.enterprise.container.common.impl.util.InjectionManagerImpl.injectInstance(InjectionManagerImpl.java:171)
at org.glassfish.faces.integration.GlassFishInjectionProvider.inject(GlassFishInjectionProvider.java:184)
... 55 more
Caused by: javax.naming.NamingException: Lookup failed for 'java:comp/env/managedBeans.DocumentoMB/documento' in SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs=com.sun.enterprise.naming} [Root exception is javax.naming.NamingException: Exception resolving Ejb for 'Remote ejb-ref name=managedBeans.DocumentoMB/documento,Remote 3.x interface =modelo.Documento,ejb-link=null,lookup=,mappedName=,jndi-name=modelo.Documento,refType=Session' . Actual (possibly internal) Remote JNDI name used for lookup is 'modelo.Documento#modelo.Documento' [Root exception is javax.naming.NamingException: Lookup failed for 'modelo.Documento#modelo.Documento' in SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs=com.sun.enterprise.naming} [Root exception is javax.naming.NameNotFoundException: modelo.Documento#modelo.Documento not found]]]
at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:518)
at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:455)
at javax.naming.InitialContext.lookup(InitialContext.java:411)
at javax.naming.InitialContext.lookup(InitialContext.java:411)
at com.sun.enterprise.container.common.impl.util.InjectionManagerImpl._inject(InjectionManagerImpl.java:599)
... 58 more
Caused by: javax.naming.NamingException: Exception resolving Ejb for 'Remote ejb-ref name=managedBeans.DocumentoMB/documento,Remote 3.x interface =modelo.Documento,ejb-link=null,lookup=,mappedName=,jndi-name=modelo.Documento,refType=Session' . Actual (possibly internal) Remote JNDI name used for lookup is 'modelo.Documento#modelo.Documento' [Root exception is javax.naming.NamingException: Lookup failed for 'modelo.Documento#modelo.Documento' in SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs=com.sun.enterprise.naming} [Root exception is javax.naming.NameNotFoundException: modelo.Documento#modelo.Documento not found]]
at com.sun.ejb.EjbNamingReferenceManagerImpl.resolveEjbReference(EjbNamingReferenceManagerImpl.java:191)
at com.sun.enterprise.container.common.impl.ComponentEnvManagerImpl$EjbReferenceProxy.create(ComponentEnvManagerImpl.java:1109)
at com.sun.enterprise.naming.impl.GlassfishNamingManagerImpl.lookup(GlassfishNamingManagerImpl.java:776)
at com.sun.enterprise.naming.impl.GlassfishNamingManagerImpl.lookup(GlassfishNamingManagerImpl.java:744)
at com.sun.enterprise.naming.impl.JavaURLContext.lookup(JavaURLContext.java:169)
at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:498)
... 62 more
Caused by: javax.naming.NamingException: Lookup failed for 'modelo.Documento#modelo.Documento' in SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs=com.sun.enterprise.naming} [Root exception is javax.naming.NameNotFoundException: modelo.Documento#modelo.Documento not found]
at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:518)
at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:455)
at javax.naming.InitialContext.lookup(InitialContext.java:411)
at javax.naming.InitialContext.lookup(InitialContext.java:411)
at com.sun.ejb.EjbNamingReferenceManagerImpl.resolveEjbReference(EjbNamingReferenceManagerImpl.java:186)
... 67 more
Caused by: javax.naming.NameNotFoundException: modelo.Documento#modelo.Documento not found
at com.sun.enterprise.naming.impl.TransientContext.doLookup(TransientContext.java:248)
at com.sun.enterprise.naming.impl.TransientContext.lookup(TransientContext.java:215)
at com.sun.enterprise.naming.impl.SerialContextProviderImpl.lookup(SerialContextProviderImpl.java:77)
at com.sun.enterprise.naming.impl.LocalSerialContextProviderImpl.lookup(LocalSerialContextProviderImpl.java:119)
at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:505)
... 71 more

pois é alguém sabe me dizer por que disso e como resolver, se tem outra maneira de fazer essa consulta notem que documento recebe varias chaves estrangeira , acho que isso influencia, não?

4 Respostas

H

cara não to vendo o código do factory

EntityManagerFactory emf = Persistence.createEntityManagerFactory("Adinstar-webPU");
    EntityManager em = emf.createEntityManager();
jaissonduarte

hisoka:
cara não to vendo o código do factory

EntityManagerFactory emf = Persistence.createEntityManagerFactory("Adinstar-webPU");
    EntityManager em = emf.createEntityManager();</blockquote>

coloquei sim da uma olhada:

@PersistenceContext(name = "pesquisaDocumentoPU")
    private EntityManager em;

pra não dizer que não tentei fiz como tu falou mas o mesmo erro aconteceu,

bem mas o meu problemas está na classe Documento, o que tenho que fazer?

Rodrigo_Sasaki

posta seu documentoMB

jaissonduarte
package managedBeans;

import facade.DocumentoFacade;
import java.util.List;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import modelo.Documento;

@ManagedBean(name = "documentoMB")
@RequestScoped
public class DocumentoMB {

    @EJB
    private Documento documento;
    private DocumentoFacade documentoFacade;
    private List<Documento> documentos;

    public Documento getDocumento() {
        if (documento == null) {  
            documento = new Documento();
        }  
        return documento;
    }

    public void setDocumento(Documento documento) {
        this.documento = documento;
    }

    public List<Documento> getDocumentos() {
        return documentos;
    }

    public void setDocumentos(List<Documento> documentos) {
        this.documentos = documentos;
    }

    public String pesquisar() {
        try {
            if (documentoFacade.pesquisarArea(documento.getTitulo()) != null) {
                documentos = documentoFacade.pesquisarArea(documento.getTitulo());
            }
        } catch (Exception e) {
            System.out.println("erro\n"+e.getMessage());
            return "Erro";
        }
        return "Resultado";
    }
}
Criado 2 de abril de 2012
Ultima resposta 3 de abr. de 2012
Respostas 4
Participantes 3