Duvida como encontrar um registro no banco tipo Date .....JPA/Hibernate

4 respostas
P

Olá,

estou com um problema quando monto um select dinamico através
hibernate /criteria …

Minha duvida é o seguinte é informado na teka jsp uma data (String)

depois converto em data só que a data convertida é sem hora . minuto e segundo…

E quando vai no banco não encontra pois usa "=" e não existe a data sem hora,minuto e segundo ???

Alguém já caiu nessa situação …se pudr ajudar …

abs

--criteria
criteria.add(Restrictions.eq(detail.getColumn(),CriteriaSearchDetail.checkTypeOfClass(classTableName, detail.getColumn(), detail.getValue(),detail.getOperator())));

    -- banco de dados MYSQL
   2011-06-18 20:59:29
--como zerar hora/minuto/segundo

public static Date convertStringToDate(String date,String operator) throws BaseException {
		Date out = null;
		SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");  
		
		try {
			Date dataTODate = dateFormat.parse(date);
			
			if (operator.equals("=")||operator.equals(">")||operator.equals(">=")||operator.equals("!")){
				out = DateUtils.lowDateTime(dataTODate);	
			}else{
				out = DateUtils.highDateTime(dataTODate);
			}
 
		} catch(Exception e) {
			//throw new BaseException(e, "CriteriaSearchDetail", "convertStringToCalendar", "1");
		}
		return out;
	}
--
 public static Date lowDateTime(Date date) {  
	           Calendar aux = Calendar.getInstance();  
	           aux.setTime(date);  
	           toOnlyDate(aux); //zera os parametros de hour,min,sec,milisec  
	           return aux.getTime();  
	       }  

---
  public static Date highDateTime(Date date) {  
	           Calendar aux = Calendar.getInstance();  
	           aux.setTime(date);  
	           toOnlyDate(aux); //zera os parametros de hour,min,sec,milisec  
	           aux.roll(Calendar.DATE, true); //vai para o dia seguinte  
	           aux.roll(Calendar.MILLISECOND, false); //reduz 1 milisegundo  
	           return aux.getTime();  
	       }  

--
  public static void toOnlyDate(Calendar date) {  
	           date.set(Calendar.HOUR_OF_DAY, 0);  
	           date.set(Calendar.MINUTE, 0);  
	           date.set(Calendar.SECOND, 0);  
	           date.set(Calendar.MILLISECOND, 0);  
	       }

4 Respostas

ignacio83

Vc está mapeando com @Temporal(Date) a coluna de sua entity? Se não estiver coloque assim…

É bem capaz que vc tenha mapeado como @Temporal(Timestamp)

P

obrigado pelo retorno

mas está assim

@Column
	private Date notBefore;
	@Column
	private Date notAfter;

se colocar @Temporal(Date) vai gravar somente a data ???

o que preciso nesse campo é gravar a data mais hora,minuto e segundo ???

se puder me ajudar agradeceria …

abs

thiagocg

cara se for só pra pegar os campos de hora minuto e segundo muda seu simpleDateFormat para:

que ele vai te retornar com td!

Abraço

ignacio83

Ah… entedi errado o seu problema…

Acredito que a sua solução está no post do thiagocg. Só um detalhe utilize dd/MM/yyyy HH:mm:ss (com H maísculo para formato com 24 horas)

De qualquer forma @Temporal(DATE), grava somente a data e @Temporal(Timestamp) grava hora minuto e segundo também…

Criado 5 de maio de 2009
Ultima resposta 5 de mai. de 2009
Respostas 4
Participantes 3