Estoy tratando de obtener los datos almacenados en la base de datos por conseguir la fecha y luego rellenar la tabla.
List<String> contents = new ArrayList<>();
List<Record> records
try {
Session session = sessionFactory.getCurrentSession();
Query<World> query = null;
query = session.createQuery("from World where date like :dateCont, World.class);
query.setParameter("dateCont", "%" + contents.get(0) + "%");
worlds = query.getResultList();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
El problema aquí es que me da una excepción de error:
java.lang.ClassCastException: java.lang.String clase no se puede convertir a la clase java.util.Date (java.lang.String y java.util.Date están en java.base módulo del cargador de 'arranque')
Yo sé lo que está mal porque los List<String> contents
valores son cuerdas y necesitaba ser convertido a la fecha, pero me trataron tantos códigos y no funciona.
//The following are the codes that I tried but it won't work:
//FIRST
Date date = new SimpleDateFormat("MM/dd/yyyy").parse(contentsStart.get(0));
new SimpleDateFormat("yyyy-MM-dd").format(date);
//---------------------------------------
//SECOND
Date newDate;
DateFormat formatter = null;
formatter = new SimpleDateFormat("yyyy-MM-dd");
newDate = (Date) formatter.parse(contentsStart.get(0));
Así que, ¿hay alguna manera de cambiar el valor dado hasta la fecha, pero debe conserva el formato "aaaa-MM-dd" y el tipo de datos debería ser la fecha.
PD: el formato de fecha en la base de datos es "aaaa-MM-dd" también. Tanto mi campo de entidad fecha y la fecha a partir de DB es a la vez la fecha como su tipo de datos.
Se puede utilizar like
el operador sólo en cadena ( VARCHAR
) campos. En la cláusula WHERE usted tiene que convertir su campo de cadena (usando la función de formato) con el fin de poder utilizar LIKE
. Así que hay que llamar a la función de conversión (también) en la consulta.
Por desgracia, no hay fecha en funciones EJBQL, por lo que tendrá que cambiar a la consulta nativa. Por ejemplo, para Oracle puede utilizar TO_CHAR
como esto
SELECT ... WHERE TO_CHAR(date, 'MM/DD/YYYY') LIKE ...
Para obtener un rendimiento bueno, tendrá que añadir un índice funcional.
Ver también http://www.sqlines.com/oracle-to-sql-server/to_char_datetime
Una alternativa sería añadir una columna nueva cadena date_string
, que contendrá la representación con formato de fecha y utilizar esta columna con LIKE
. Pero tendrá que estar absolutamente seguro de que ambas fechas siempre están sincronizados.