[RESOLVIDO] Problema com NamedQuery JPA campo Date

Olá Pessoal!!

Boa noite,
Por favor, gostaria que me ajudassem, o meu caso é o seguinte:

Eu tendo a classe @Entity Agenda com o seguinte:

@Column(nullable=false) @Temporal(javax.persistence.TemporalType.DATE) private Date dataMarcada;

E nesta mesma classe a namedQuery:
@NamedQueries({ @NamedQuery(name="buscarAgendaMedico", query="select agenda from Agenda agenda where agenda.medico.id = :codigomedico and agenda.datamarcada = datamarcada order by agenda.hora") })

No meu DaoAgenda tenho:

[code] public Iterator consultarAgendaMedico(Agenda a){
EntityManager dao = Conexao.getEM();
Query query = dao.createNamedQuery(“buscarAgendaMedico”);
query.setParameter(“codigomedico”, a.getMedico().getCodigoPessoa());

    query.setParameter("datamarcada", a.getDataMarcada());
    query.setParameter("hora", a.getHora());
    
    List<Agenda> resultados = query.getResultList();
    Iterator<Agenda> iteradorAgenda = resultados.iterator();
    dao.close();
    return iteradorAgenda;
}

[/code]
Enfim, Dá o seguinte erro:

Exception in thread "AWT-EventQueue-0" java.lang.ExceptionInInitializerError   
        at dao.DaoTipoUsuario.consultarTodos(DaoTipoUsuario.java:24)   
        at viewControl.Principal.adicionaTiposDeUsuarioBd(Principal.java:561)   
        at viewControl.Principal.<init>(Principal.java:58)   
        at viewControl.Principal$1.run(Principal.java:579)   
        at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)   
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)   
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)   
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)   
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)   
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)   
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)   
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)   
Caused by: javax.persistence.PersistenceException: [PersistenceUnit: SysPoliClinicPU] Unable to build EntityManagerFactory   
        at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:677)   
        at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:126)   
        at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:51)   
        at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:33)   
        at dao.Conexao.<clinit>(Conexao.java:14)   
        ... 12 more   
Caused by: org.hibernate.HibernateException: Errors in named queries: buscarAgendaMedico   
        at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:365)   
        at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1294)   
        at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:859)   
        at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:669)   
        ... 16 more  

O erro só some se eu tirar isso: and agenda.datamarcada = :datamarcada.
Tentei usar a clausula to_date na namedQuery e nada…
To quase transformando o campo em String…

Alguém teria alguma idéia de como posso resolver isso???
Muito obrigada pessoal!
Dina

Acho que está faltando os ‘:’ para datamarcada.

   @NamedQueries({  
        @NamedQuery(name="buscarAgendaMedico", query="select agenda from Agenda agenda 
         where agenda.medico.id =:codigomedico and agenda.datamarcada = :datamarcada order by agenda.hora")  
    })  

dsjvb,
Muito obrigada por responder, realmente estava faltando o : mas mesmo assim o erro continua, os códigos que testei foram:

@NamedQueries({ @NamedQuery(name="buscarAgendaMedico", query="select agenda from Agenda agenda where agenda.medico.id =:codigomedico and agenda.datamarcada = :datamarcada order by agenda.hora") })

@NamedQueries({ @NamedQuery(name="buscarAgendaMedico", query="select agenda from Agenda agenda where agenda.medico.id =:codigomedico and to_date(agenda.datamarcada) = to_date(:datamarcada, 'dd/MM/yyyy') order by agenda.hora") }) Sendo que testei tbm: to_date(:datamarcada, ‘yyyy/MM/dd’) e tbm to_date(:datamarcada, ‘yyyy-MM-dd’) e nada…

Alguém saberia como resolver isso??
Muito obrigada!!

Pessoal, tem um detalhe que eu não citei. Como eu havia informado:

[quote=dina]No meu DaoAgenda tenho:

[code] public Iterator consultarAgendaMedico(Agenda a){
EntityManager dao = Conexao.getEM();
Query query = dao.createNamedQuery(“buscarAgendaMedico”);
query.setParameter(“codigomedico”, a.getMedico().getCodigoPessoa());

    query.setParameter("datamarcada", a.getDataMarcada());
    query.setParameter("hora", a.getHora());
    
    List<Agenda> resultados = query.getResultList();
    Iterator<Agenda> iteradorAgenda = resultados.iterator();
    dao.close();
    return iteradorAgenda;
}

[/code]
[/quote]

Dando um:

System.out.println(agenda.getDataMarcada())

Aparece na saída: Tue Nov 02 00:00:00 BRST 2010
E no meu BD na coluna datamarcada há o seguinte dado 2010-11-02

Acho que deve ser isso, nééé??
Alguém sabe como resolvo?? Pois tentei usar o to_date e nada…

Obrigada…

Qual provider está configurado no persistence.xml?

Acho que pode ser alguma coisa de configuração.

Olá!!
Desculpa a demora em responder:

<provider>org.hibernate.ejb.HibernatePersistence</provider>

O que acha??
Muito obrigada:-)

É o mesmo provider que eu estou usando … acho que não é isso não.
No banco de dados a coluna é do tipo DATETIME ou só DATE?

Apenas date, por este motivo acho que está dando o erro…

Pois no meu BD o dado está como: 2010-11-02
E no a.getDataMarcada() está como: Tue Nov 02 00:00:00 BRST 2010

Acho que pode ser isso, tenta mudar pra DATETIME e depois fala se funcionou.

Não…
:frowning:

Posta o código do método consultarTodos.

[quote=dina] @Column(nullable=false) @Temporal(javax.persistence.TemporalType.DATE) private Date dataMarcada;

E nesta mesma classe a namedQuery:
@NamedQueries({ @NamedQuery(name="buscarAgendaMedico", query="select agenda from Agenda agenda where agenda.medico.id = :codigomedico and agenda.datamarcada = datamarcada order by agenda.hora") })[/quote]
Acho que o problema na query é que o nome do campo está diferente do passado para query. Seu campo é dataMarcada com “M” maiúsculo e o parâmetro da query está datamarcada com “m” minúsculo. Tente trocar em sua NamedQuery:

:codigomedico and agenda.datamarcada = datamarcada por :codigomedico and agenda.dataMarcada = :datamarcada

Eric Yuzo
EU NÃO ACREDITO NISSO!!!
DIAS E DIAS NISSO!!

Na verdade, eu não testei o select, mas pelo menos não apareceu mais o erro e o programa rodou!!!
:smiley:

dsjbv Obrigada por tudo!!!