[RESOLVIDO] Posso colocar no BD um campo Date como String?

Olá pessoal!!
Estou quebrando a cabeça para resolver um problema. Tenho que, a partir de uma data selecionar a agenda do médico.
Utilizo JPA, hibernate…

Estou pensando em transformar no BD:

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

Para String… isso até que ponto está errado se eu fizer o tratamento de erro, e ter certeza de que antes de inserir no BD o dado, este será um valor válido?

Estou desesperada pois estou com esse erro, e aparentemente o erro está meio "escondido…"
O link para o problema é: http://www.guj.com.br/posts/list/223343.java

Muito obrigada pessoal!

Olá

Pessoalmente não sou a favor de mudar o tipo de dado assim desta forma radical (Date - String).

Eu costumo a usar Calendar ao invés de Date, pois o date tem vários metodos deprected. Dai optei por usar o Calendar.
Para seu caso talvez funcione. Mas precisa fazer algumas alterações em códigos, não em base…

Mapeamento:

@Column(name="datamarcada",nullable=false)     
private Calendar dataMarcada; 

Na hora de executar a query

EntityManager dao = Conexao.getEM();  
Query query = dao.createNamedQuery("buscarAgendaMedico");  
query.setParameter("codigomedico", a.getMedico().getCodigoPessoa());  
query.setCalendar("datamarcada", a.getDataMarcada()); 

Antes de mudar tente isso…

EntityManager dao = Conexao.getEM();  
Query query = dao.createNamedQuery("buscarAgendaMedico");  
query.setParameter("codigomedico", a.getMedico().getCodigoPessoa());  
query.setDate("datamarcada", a.getDataMarcada()); 

Acho que pode te ajudar um pouco
http://www.javatx.cn/hibernate/api/org/hibernate/Query.html

Caso não funcionar o calendar funciona, pois fiz muito isso já…

Espero ter ajudado
Flwssss

Olá Thiago!
Primeiro lugar, obrigada por responder…

Bom, to tentando colocar o que vc disse:

EntityManager dao = Conexao.getEM();     
Query query = dao.createNamedQuery("buscarAgendaMedico");     
query.setParameter("codigomedico", a.getMedico().getCodigoPessoa());     
query.setDate("datamarcada", a.getDataMarcada()); 

Mas, ao colocar query. não é possível colocar nem setDate e nem setCalendar…

Preciso do que pra que esses set’s fiquem disponíveis?

Nada além do Hibernate…

Veja essa query. ele tem vários set’s…
Agora não sei se é o mesmo query que estou pensando que você está usando.

Estou usando esse

Verifica se é o mesmo.

Qualquer coisa volte a postar


Opa!! Não é não!!
Os meus são:
query.setResult
query.setFlushMode
query.MaxResults
6 query.setParameter

tava sem o

import org.hibernate.Query;

Mesmo depois de colocar continuaram os mesmos query.

Pq será isso?
Obrigada pela paciência!

ixi… complicou !!! srsrsr…

Deve ser porque estou fazendo a query a partir da Session que tenho na thread do server.
E você esta pegando do EntityManager.
Mas não era para ser diferente.

Outra coisa que peguei o createQuery e não o createNamedQuery.
Tenta fazer assim…

EntityManager dao = Conexao.getEM();    
Query query = dao.createQuery("select agenda from Agenda agenda where agenda.medico.id = :codigomedico and agenda.datamarcada = datamarcada order by agenda.hora");    
query.setParameter("codigomedico", a.getMedico().getCodigoPessoa());    
query.setDate("datamarcada", a.getDataMarcada());

Acho que isso vai habilitar o setDate…

Talvez precise fazer isso

Thiago

O createQuery não está disponível tbm… é disponível só pra quem usa Session? Pois se for, eu não uso session no meu sistema…

Mas, a boa notícia é:
O erro que estava dando ao rodar o programa foi resolvido pelo usuário do GUJ Eric Yuzo.
ao invés de:

agenda.datamarcada

deveria ser:
agenda.dataMarcada

Nossa!! NEM ACREDITO!!

Agora vou testar o select.
Ah, troquei uma coisa no setParameter:

query.setParameter("datamarcada", a.getDataMarcada(), TemporalType.Date)

O que acha?

Ah, e muito obrigada pela ajuda que vc está me dando!

OPa!! Fico contente de ter achado uma solução,

Desculpe ficar tentando (“chutando”) algumas soluções.

Boa programação daqui para frente
e tendo dúvidas volte a postar no forum ou enviar mensagem.

Thiago
Magina!! Não tem o pq pedir desculpa!! Aprendi muito nesse tópico… e a facilidade que uma session proporciona…

Obrigada mesmo pela ajuda e pela sua boa vontade!!
:slight_smile: