首页 > 解决方案 > hibernate 不会在注册日期之前搜索信息

问题描述

我正在尝试使用日期在休眠中获取一个字段,但出现以下错误:

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)

有没有人看到这个,我该如何解决?

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();
    }
}

标签: javahibernatecriteria

解决方案


推荐阅读