Eu estou tentando obter os dados armazenados no banco de dados, obtendo a data, em seguida, preencher a tabela.
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();
}
O problema aqui é que ele me dá uma exceção de erro:
java.lang.ClassCastException: java.lang.String classe não pode ser convertido para a classe java.util.Date (java.lang.String e java.util.Date estão no módulo java.base do carregador 'bootstrap)
Eu sei o que está errado, porque os List<String> contents
valores são corda e precisava ser convertido em Data, mas eu tentei tantos códigos e ele não 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));
Então, há alguma maneira de mudar o valor dado à data, mas que deveria mantém o formato "AAAA-MM-DD" e o tipo de dados deve ser Data.
PS: o formato da data no banco de dados é "AAAA-MM-DD" também. Tanto o meu campo entidade data e data a partir da DB é tanto a data como seu tipo de dados.
Você pode usar o like
operador só na corda ( VARCHAR
campos). Na cláusula WHERE você tem que converter seu campo para string (usando a função format), a fim de ser capaz de usar LIKE
. Então você tem que chamar a função de conversão (também) na consulta.
Infelizmente, não há DATA-funções em EJBQL, então você vai ter que mudar para a consulta nativa. Por exemplo, para Oracle você pode usar TO_CHAR
como esta
SELECT ... WHERE TO_CHAR(date, 'MM/DD/YYYY') LIKE ...
Para um desempenho bom você terá que adicionar um índice funcional.
Veja também http://www.sqlines.com/oracle-to-sql-server/to_char_datetime
Uma alternativa seria a de adicionar uma nova coluna de cadeia date_string
, que irá conter a representação formatada de sua data e usar esta coluna com LIKE
. Mas você terá que fazer absolutamente certo, que ambas as datas são sempre sincronizados.