Pessoal,
Alguem poderia me ajudar, comecei a pouco tempo a estudar hibernate, etc… e estou tentando buscar uma data usando o hibernate escificamente o criteria, porem ao tentar executar o mesmo me dar um erro abaixo.
INFO: HHH10001501: Connection obtained from JdbcConnectionAccess [org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess@f08fdce] for (non-JTA) DDL execution was not in auto-commit mode; the Connection ‘local transaction’ will be committed and the Connection will be set into auto-commit mode.
Hibernate: select contato0_.id as id1_0_, contato0_.dataCadastro as datacada2_0_, contato0_.formatter as formatte3_0_, contato0_.idade as idade4_0_, contato0_.nome as nome5_0_ from Contato contato0_ where contato0_.dataCadastro=?
java.lang.ClassCastException: class java.lang.String cannot be cast to class java.util.Date (java.lang.String and java.util.Date are in module java.base of loader ‘bootstrap’)
at org.hibernate.type.descriptor.java.JdbcTimestampTypeDescriptor.unwrap(JdbcTimestampTypeDescriptor.java:24)
at org.hibernate.type.descriptor.sql.TimestampTypeDescriptor$1.doBind(TimestampTypeDescriptor.java:48)
at org.hibernate.type.descriptor.sql.BasicBinder.bind(BasicBinder.java:73)
at org.hibernate.type.AbstractStandardBasicType.nullSafeSet(AbstractStandardBasicType.java:276)
at org.hibernate.type.AbstractStandardBasicType.nullSafeSet(AbstractStandardBasicType.java:271)
at org.hibernate.param.NamedParameterSpecification.bind(NamedParameterSpecification.java:53)
at org.hibernate.loader.hql.QueryLoader.bindParameterValues(QueryLoader.java:682)
at org.hibernate.loader.Loader.bindPreparedStatement(Loader.java:2137)
at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:2114)
at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:2046)
at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:2024)
at org.hibernate.loader.Loader.doQuery(Loader.java:955)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:356)
at org.hibernate.loader.Loader.doList(Loader.java:2855)
at org.hibernate.loader.Loader.doList(Loader.java:2837)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2669)
at org.hibernate.loader.Loader.list(Loader.java:2664)
at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:540)
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:400)
at org.hibernate.engine.query.spi.HQLQueryPlan.performList(HQLQueryPlan.java:219)
at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1443)
at org.hibernate.query.internal.AbstractProducedQuery.doList(AbstractProducedQuery.java:1649)
at org.hibernate.query.internal.AbstractProducedQuery.list(AbstractProducedQuery.java:1617)
at org.hibernate.query.internal.AbstractProducedQuery.getSingleResult(AbstractProducedQuery.java:1665)
at org.hibernate.query.criteria.internal.compile.CriteriaQueryTypeQueryAdapter.getSingleResult(CriteriaQueryTypeQueryAdapter.java:111)
at br.com.hibernate.dao.ContatoDao.getByDataCadastro(ContatoDao.java:184)
at br.com.hibernate.aplicacao.Main.main(Main.java:50)
Segue o metodo que criei:
public void getByDataCadastro( int dataCadastro) {
try(Session session = Util.getSessionFactory().openSession()){
CriteriaBuilder criteriaBuilder = session.getCriteriaBuilder();
CriteriaQuery<Contato> criteriaQuery = criteriaBuilder.createQuery(Contato.class);
Root<Contato> root = criteriaQuery.from(Contato.class);
criteriaQuery.select(root);
criteriaQuery.where(criteriaBuilder.equal(root.get("dataCadastro"), dataCadastro));
TypedQuery<Contato> typedQuery = session.createQuery(criteriaQuery);
Contato contato = typedQuery.getSingleResult();
System.out.println(contato.getNome() + ", " + contato.getIdade() + ", " + contato.getDataCadastro() );
}catch (Exception e) {
e.printStackTrace();
}