En la BD las guardo como fechas, lo de "aparecen bien" quiere decir que en realidad el programa que usas para visualizar tu BDD ya te lo formatea adecuadamente. Por que las fechas internamente se suelen guardar como el numero de milisegundos a partir de una fecha base

.
Lo que hay que aprender es a comparar obtener y formatear las fechas adecuadamente, ya que no son datos "simples" como un string o un numerico. Si utilizas los "bound parameters", Hibernate ya se encarga de las transformaciones adecuadas para la comparacion etc. (ojo que una fecha no es solo un dia, si no que es dia + tiempo). Para formatearlas, SimpleDateFormat, por ejemplo, es una gran ayuda.
S!