Foros del Web » Programación para mayores de 30 ;) » Java »

problemas ordenando

Estas en el tema de problemas ordenando en el foro de Java en Foros del Web. hola!! Estoy haciendo unas ordenaciones con los datos sacados de la base de datos. Los datos estan en una lista: fechas = session.createCriteria(Ingresos.class).list();(uso hibernate) y ...
  #1 (permalink)  
Antiguo 17/10/2007, 10:34
Avatar de cris_maco  
Fecha de Ingreso: abril-2007
Ubicación: Salamanca
Mensajes: 254
Antigüedad: 17 años
Puntos: 0
problemas ordenando

hola!!

Estoy haciendo unas ordenaciones con los datos sacados de la base de datos. Los datos estan en una lista:
fechas = session.createCriteria(Ingresos.class).list();(uso hibernate)

y he visto que se pueden usar dos metodos para ordenar:comparable y comparator.
Me he decidido por el primero y siguiendo un ejemplo visto en:
http://www.adictosaltrabajo.com/tuto...?pagina=listas

me da el siguiente error:
java.lang.ClassCastException: proyecto.hibernate.Ingresos cannot be cast to java.lang.Comparable
y en la linea Collections.sort(fechas);


Tengo mis clases IngresosDao e IngresosVO.
en el Dao tengo sacados los datos de la lista y llamo a :
Collections.sort(fechas);
en el VO tengo ya el metodo de comparacion y le tengo puesto que implemente la interfaz comparable.

el error lo entiendo, el problema es que no se como solventarlo ya que es la primera vez que uso estos metodos de comparacion.

gracias!!
  #2 (permalink)  
Antiguo 18/10/2007, 05:37
 
Fecha de Ingreso: febrero-2004
Ubicación: andorra
Mensajes: 406
Antigüedad: 20 años, 2 meses
Puntos: 1
Re: problemas ordenando

Hola,

No te seria mas facil ordenar los datos cuando ejecutas la sql.

ejemplo:

select nombre_producto from producto order by nombre_producto asc

o

select nombre_producto from producto order by nombre_producto desc

un saludo,

Frank
__________________
vuestro amigo franju
  #3 (permalink)  
Antiguo 18/10/2007, 05:59
Avatar de cris_maco  
Fecha de Ingreso: abril-2007
Ubicación: Salamanca
Mensajes: 254
Antigüedad: 17 años
Puntos: 0
Re: problemas ordenando

si, pero ordenar por fechas no es tan facil ya que al hacer eso se ordenan los dias pero no respecto a los meses y años
  #4 (permalink)  
Antiguo 18/10/2007, 07:12
 
Fecha de Ingreso: febrero-2004
Ubicación: andorra
Mensajes: 406
Antigüedad: 20 años, 2 meses
Puntos: 1
Re: problemas ordenando

Hola,

que base de datos utilizas? ya que al leer tu correo he hecho una prueba con un mysql i me lo ha ordenado correctament.

Un saludo,

Frank
__________________
vuestro amigo franju
  #5 (permalink)  
Antiguo 18/10/2007, 08:21
Avatar de cris_maco  
Fecha de Ingreso: abril-2007
Ubicación: Salamanca
Mensajes: 254
Antigüedad: 17 años
Puntos: 0
Re: problemas ordenando

si, tengo mysql pero cuando lo probe no me lo ordenaba bien, ya te comente antes que solo me lo ordenaba teniendo en cuenta los dias, de todas formas es que lo guardo como string y no como date, puede que sea por eso?
  #6 (permalink)  
Antiguo 18/10/2007, 10:20
 
Fecha de Ingreso: octubre-2007
Mensajes: 16
Antigüedad: 16 años, 7 meses
Puntos: 0
Re: problemas ordenando

Cita:
Iniciado por cris_maco Ver Mensaje
si, tengo mysql pero cuando lo probe no me lo ordenaba bien, ya te comente antes que solo me lo ordenaba teniendo en cuenta los dias, de todas formas es que lo guardo como string y no como date, puede que sea por eso?
Seguramente sea por eso, yo tambien utilizo mysql y para las fechas utilizo timestamp, por ejemplo una fecha dentro de una tabla la tengo definida asi.

fecha_i timestamp not null default now(),

De todas formas dentro de una consulta puedes sacar el año, el mes o el dia con la linea (extract (year from fecha_i)) de una fecha cualquiera.

Un ejmplo de una consulta seria:

select nombre, dni, (extract (year from fecha_i)) as anio
from persona
order by anio;

Pero yo creo que tu problema viene mas por ponerla como un string.
  #7 (permalink)  
Antiguo 19/10/2007, 03:29
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Re: problemas ordenando

Si las fechas las tienes como string, al ordenarlas en Java tendras el mismo problema, ya que te las ordenara como cadenas y no como fechas.

En cuanto al problema original, lo que hay que hacer es hacer caso al error: Te dice que no los puede ordenar por que la clase proyecto.hibernate.Ingresos no implementa la interfaz java.lang.Comparable, asi que si haces que la implemente...

S!
  #8 (permalink)  
Antiguo 23/10/2007, 03:12
 
Fecha de Ingreso: septiembre-2004
Mensajes: 191
Antigüedad: 19 años, 7 meses
Puntos: 1
Re: problemas ordenando

las fechas guardarlas en bd como fechas, no me seais chapuceros hombre.
  #9 (permalink)  
Antiguo 23/10/2007, 06:48
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Re: problemas ordenando

Dado que no sabemos quien ha decidido como seran los campos de la BDD y las circunstancias que le han llevado a hacerlo asi... lo mínimo es un poco de respeto, digo yo.
  #10 (permalink)  
Antiguo 23/10/2007, 09:34
Avatar de cris_maco  
Fecha de Ingreso: abril-2007
Ubicación: Salamanca
Mensajes: 254
Antigüedad: 17 años
Puntos: 0
Re: problemas ordenando

Ya vale,
Voy a cambiar a fechas porque Greeneyed me acabo de convencer al ver que iba a tener el mismo problema, gracias!
Por otro lado yo elegi la base de datos, como la queria hacer y demas y escogi hacerlo con string porque al principio el tipo date me dio un poco la lata y era mas facil operar con string, ahora ya se que es una tonteria pero yo no habia tocado en mi vida hibernate, java, struts y mysql. Lo he aprendido para el proyecto de fin de carrera(desde febrero mas o menos) y al final creo que se algo. Asi que dejare de ser chapucera y me hare los conversores ya que el tipo date me escribe las fechas 2007/10/22 y claro en España eso no se usa y quiero dejar el proyecto claro para la empresa.

gracias a TODOS por todas vuestras sugerencias, todas vienen bien
  #11 (permalink)  
Antiguo 23/10/2007, 09:59
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Re: problemas ordenando

Cita:
Iniciado por cris_maco Ver Mensaje
... me hare los conversores ya que el tipo date me escribe las fechas 2007/10/22 y claro en España eso no se usa y quiero dejar el proyecto claro para la empresa
El que te guarde las fechas asi en la BDD es cuestion interna de la BDD y como tenga el idioma (locale) por defecto. Esas cosas se pueden configurar, normalmente, en la BDD. De todas formas, para que te aplicacion no dependa de que la BDD esté configurada así o asá, es bueno formatear explicitamente tú las fechas como quieres que se vean. Es una de las buenas practicas para la internacionalización de aplicaciones.

Y para hacerlo, lo más habitual es java.text.SimpleDateFormat con el Locale adecuado.
Por ejemplo:
http://home.tiscali.nl/~bmc88/java/sbook/016.html

S!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:43.