Erro no createEntityManagerFactory (JPA + Hibernate) [RESOLVIDO]

xhtml

   <p:commandButton value="Entrar" ajax="false" type="submit"
                                             actionListener="#{UsuarioBean.verificaUser()}"        />

Bean

  public void verificaUser(){
        boolean flag = false;
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("banco"); !!!!!!!!!!!!!  ERRO NESSA LINHA AO EXECUTAR  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
        manager = emf.createEntityManager();
        try {
            manager.getTransaction().begin();
            flag = new UsuarioQuery(this.manager).logar(usuario, senha);
        } catch (Exception e) {
            manager.getTransaction().rollback();  
            e.printStackTrace(); 
        }
        finally{
            emf.close();
        }

Persistence

    <?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
  <persistence-unit name="banco" transaction-type="RESOURCE_LOCAL">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <exclude-unlisted-classes>false</exclude-unlisted-classes>
    <properties>
      <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect"/>   
      <property name="hibernate.hbm2dll.auto" value="update"/>  
      <property name="hibernate.show_sql" value="true"/>              
      <property name="hibernate.format_sql" value="true"/>
      <property name="javax.persistence.jdbc.driver" value="org.postgresql.Driver"/> 
      <property name="javax.persistence.jdbc.url" value="jdbc:postgresql://localhost:5432/SG"/>
      <property name="javax.persistence.jdbc.password" value="admin"/>
      <property name="javax.persistence.jdbc.user" value="postgres"/>
      <property name="hibernate.temp.use_jdbc_metadata_defaults" value="false"/> 
      <property name="hibernate.cache.provider_class" value="org.hibernate.cache.NoCacheProvider"/>
    </properties>
  </persistence-unit>
</persistence>

Erro!!!

  SEVERE: /login.xhtml @44,102 actionListener="#{UsuarioBean.verificaUser()}": java.lang.NoSuchMethodError: org.hibernate.cfg.annotations.reflection.XMLContext$Default.getDelimitedIdentifier()Ljava/lang/Boolean;
javax.faces.event.AbortProcessingException: /login.xhtml @44,102 actionListener="#{UsuarioBean.verificaUser()}": java.lang.NoSuchMethodError: org.hibernate.cfg.annotations.reflection.XMLContext$Default.getDelimitedIdentifier()Ljava/lang/Boolean;
	at javax.faces.event.MethodExpressionActionListener.processAction(MethodExpressionActionListener.java:182)
	at javax.faces.event.ActionEvent.processListener(ActionEvent.java:88)
	at javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:769)
	at javax.faces.component.UICommand.broadcast(UICommand.java:300)
	at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:794)
	at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1259)
	at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
	at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:225)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:999)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:565)
	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:309)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
	at java.lang.Thread.run(Thread.java:722)
Caused by: java.lang.NoSuchMethodError: org.hibernate.cfg.annotations.reflection.XMLContext$Default.getDelimitedIdentifier()Ljava/lang/Boolean;
	at org.hibernate.cfg.annotations.reflection.JPAMetadataProvider.getDefaults(JPAMetadataProvider.java:87)
	at org.hibernate.annotations.common.reflection.java.JavaReflectionManager.getDefaults(JavaReflectionManager.java:226)
	at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1331)
	at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1756)
	at org.hibernate.ejb.EntityManagerFactoryImpl.<init>(EntityManagerFactoryImpl.java:96)
	at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:914)
	at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:899)
	at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:59)
	at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:51)
	at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:33)
	at bean.UsuarioBean.verificaUser(UsuarioBean.java:56)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:601)
	at org.apache.el.parser.AstValue.invoke(AstValue.java:264)
	at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:278)
	at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
	at javax.faces.event.MethodExpressionActionListener.processAction(MethodExpressionActionListener.java:148)
	... 28 more

Jun 23, 2013 10:02:54 PM org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl stop
INFO: HHH000030: Cleaning up connection pool [jdbc:postgresql://localhost:5432/SG]   

Coloque um parâmetro no seu método, deixe assim:

public void verificaUser(ActionEvent event){

}

Ou troque de actionListener para action e mude seu método pra retornar uma String…

Abs

da uma olhada nos em suas libs

ou vc esta usando alguma lib antiga do hibernate
que não possui o metodo getDelimitedIdentifier() ou esta faltando alguma lib especifica

Caused by: java.lang.NoSuchMethodError: org.hibernate.cfg.annotations.reflection.XMLContext$Default.getDelimitedIdentifier()Ljava/lang/Boolean; 

so pra complementar as classes que estão dando erro esta no jar hibernate-commons-annotations do hibernate e é uma lib obrigatoria

mudei as bibliotecas e funcionou, agora o erro é outro

“tb_usuario is not mapped [Select COUNT(*)”

Sua entidade Usuario tem a anotação @Entity ?

Se bem q esse erro costuma dar qd vc ta usando o hibernate.cfg.xml e não mapeia a entidade nele.

Vc continua usando essa linha dessa forma ?
EntityManagerFactory emf = Persistence.createEntityManagerFactory(“banco”);

[quote=b10machado]mudei as bibliotecas e funcionou, agora o erro é outro

“tb_usuario is not mapped [Select COUNT(*)”[/quote]
http://en.wikibooks.org/wiki/Java_Persistence/JPQL#Aggregation_functions

entao…ai fiz assim e o erro persiste


@Entity
@Table(name = "tb_usuario")
public class UsuarioQuery implements Serializable {
    @Id 
    @GeneratedValue(strategy=GenerationType.AUTO) 
    @Column(name="id_usuario")
    private Integer id;
    @Column(name="usuario")
    private String usuario;
    @Column(name="senha")
    private String senha;   

:
:

Query query = manager.createQuery("Select COUNT(*) from UsuarioQuery AS U where "
                + "U.usuario = :usuario and U.senha = :senha",UsuarioQuery.class);
        Long result= (Long)query.getSingleResult();
        query.setParameter("usuario", login);
        query.setParameter("senha", senha);

Essa query está dentro da entidade ?
Não né ?

isso da na classe q tem o @entity

Tente mudar a query para algo como:

[code]// acho que não há count(*) na JPQL
Query query = manager.createQuery("Select COUNT(U) from UsuarioQuery AS U where "
+ “U.usuario = :usuario and U.senha = :senha”,UsuarioQuery.class);

// primeiro os parâmetros
query.setParameter(“usuario”, login);
query.setParameter(“senha”, senha);

// depois a execução
Long result= (Long) query.getSingleResult();[/code]

Mais fácil fazer uma query mais simples ainda para ter certeza q ta funcionando o básico.

nd feito cara peguei o erro completo

e = (java.lang.IllegalArgumentException) java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: UsuarioQuery is not mapped [SELECT usuario FROM UsuarioQuery AS usuario WHERE usuario.nomeUsuario =:nomeUsuario AND usuario.senha =:senha]

coloquei uma simples e deu o mesmo erro

“select i from UsuarioQuery i”

[quote=b10machado]coloquei uma simples e deu o mesmo erro

“select i from UsuarioQuery i”[/quote]
tente mapear a entidade no persistence.xml.

[code]…
pacote.UsuarioQuery

false
…[/code]

Persistence modificado

  <?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
  <persistence-unit name="banco" transaction-type="RESOURCE_LOCAL">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <class>Dao.UsuarioQuery</class>  
    <exclude-unlisted-classes>false</exclude-unlisted-classes>
    <properties>
      <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect"/>
      <property name="hibernate.hbm2dll.auto" value="update"/>
      <property name="hibernate.show_sql" value="true"/>
      <property name="hibernate.format_sql" value="true"/>
      <property name="javax.persistence.jdbc.driver" value="org.postgresql.Driver"/>
      <property name="javax.persistence.jdbc.url" value="jdbc:postgresql://localhost:5432/SG"/>
      <property name="javax.persistence.jdbc.password" value="admin"/>
      <property name="javax.persistence.jdbc.user" value="postgres"/>
      <property name="hibernate.temp.use_jdbc_metadata_defaults" value="false"/>
      <property name="hibernate.cache.provider_class" value="org.hibernate.cache.NoCacheProvider"/>
    </properties>
  </persistence-unit>
</persistence>

ai da esse erro

Caused by: org.hibernate.MappingException: Could not determine type for: javax.persistence.EntityManager, at table: tb_usuario, for columns: [org.hibernate.mapping.Column(manager)]

Esse erro informa que não há um campo chamado “manager” do tipo “EntityManager” na tabela “tb_usuario”. Você deve ter um atributo do EntityManager de nome manager na entidade UsuarioQuery, certo? Mapeie esse atributo com @Transient. Isso fará com que o JPA entenda que esse atributo não deve ser persistido no banco de dados.

[code]public class UsuarioQuery {

...

@Transient
private EntityManager manager;

...

}[/code]

Cara, esse campo manager é o q vc usa pra fazer a busca né ?
Por isso q perguntei se estava fazendo a busca na propria entidade.

Não faz isso.

TUDO oq for da query deixa fora da entidade.
Na sua entidade só deve ter os campos q representam as colunas da tabela e get/set

vlw pessoal

agora deu isso kk

e = (java.lang.IllegalArgumentException) java.lang.IllegalArgumentException: Type specified for TypedQuery [Dao.UsuarioQuery] is incompatible with query return type [class java.lang.String]

[quote=b10machado]vlw pessoal

agora deu isso kk

e = (java.lang.IllegalArgumentException) java.lang.IllegalArgumentException: Type specified for TypedQuery [Dao.UsuarioQuery] is incompatible with query return type [class java.lang.String][/quote]
mude a query para algo como:

Query query = manager.createQuery("Select COUNT(U) from UsuarioQuery AS U where " + "U.usuario = :usuario and U.senha = :senha"); // sem o parâmetro do tipo de retorno // ... int count = (int) query.getSingleResult();