【问题标题】:Caused by: org.hibernate.QueryException: Could not resolve requested type for CAST : INT原因:org.hibernate.QueryException:无法解析 CAST 请求的类型:INT
【发布时间】:2019-02-11 13:53:41
【问题描述】:

原因:org.hibernate.QueryException:无法解析请求 CAST 的类型:INT [ SELECT SUBSTRING(referenceComptable , 8, 14) AS seqNum, SUBSTRING(referenceComptable, 4,7) AS yearCegid, SUBSTRING(referenceComptable, 1,3) 作为期刊 FROM com.dso.model.comptabilite.cegid.EtapeJudiciaireLnkFactureActesHonoraires WHERE dateCegidGenerated BETWEEN :date AND :dateYearIntervalDate ORDER BY CAST(seqNum AS INT), CAST(yearCegid AS INT), CAST(journal AS INT) 升序 ]

HQL 查询: public Sc​​rollableResults retrieveSequenceNumberForCegidGenerated(){

        StringBuilder queryBuilder = new StringBuilder(" SELECT SUBSTRING(referenceComptable , 8, 14) AS seqNum, SUBSTRING(referenceComptable, 4,7) AS yearCegid, SUBSTRING(referenceComptable, 1,3) AS journal")
                            .append(" FROM EtapeJudiciaireLnkFactureActesHonoraires ")
                            .append(" WHERE dateCegidGenerated BETWEEN :date AND :dateYearIntervalDate ")
                            .append(" ORDER BY CAST(seqNum AS INT), CAST(yearCegid AS INT), CAST(journal AS INT) ASC ");

        Query query = getFilteredCurrentSession().createQuery(queryBuilder.toString());

        //SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
        Date date = new Date();

        LocalDate yearIntervalDate = LocalDate.now().minusDays(365);
        Date dateYearIntervalDate = Date.from(yearIntervalDate.atStartOfDay(ZoneId.systemDefault()).toInstant());

        query.setParameter("date", date);
        query.setParameter("dateYearIntervalDate", dateYearIntervalDate);

        ScrollableResults referenceComptable = query.scroll(ScrollMode.FORWARD_ONLY);
        query.setCacheMode(CacheMode.IGNORE)
             .setFetchSize(500);

        return referenceComptable;
    }

当我尝试将其转换为 INT 时,它也不起作用。如何将其从字符串转换为整数?

堆栈跟踪

原因:org.hibernate.QueryException:无法解析请求 CAST 的类型:INTEGER [ SELECT SUBSTRING(referenceComptable , 8, 7) AS seqNum, SUBSTRING(referenceComptable, 4,4) AS yearCegid, SUBSTRING(referenceComptable, 1,3) 作为期刊 FROM com.dso.model.comptabilite.cegid.EtapeJudiciaireLnkFactureActesHonoraires WHERE dateCegidGenerated BETWEEN :date AND :dateYearIntervalDate ORDER BY CAST(SUBSTRING(referenceComptable , 8, 14) AS INTEGER), CAST(SUBSTRING(referenceComptable, 4,7) AS INTEGER),期刊 ASC ] 在 org.hibernate.QueryException.generateQueryException(QueryException.java:120) ~[hibernate-core-5.0.2.Final.jar:5.0.2.Final] 在 org.hibernate.QueryException.wrapWithQueryString(QueryException.java:103) ~[hibernate-core-5.0.2.Final.jar:5.0.2.Final] 在 org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:218) ~[hibernate-core-5.0.2.Final.jar:5.0.2.Final] 在 org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:142) ~[hibernate-core-5.0.2.Final.jar:5.0.2.Final] 在 org.hibernate.engine.query.spi.HQLQueryPlan.(HQLQueryPlan.java:115) ~[hibernate-core-5.0.2.Final.jar:5.0.2.Final] 在 org.hibernate.engine.query.spi.HQLQueryPlan.(HQLQueryPlan.java:76) ~[hibernate-core-5.0.2.Final.jar:5.0.2.Final] 在 org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:150) ~[hibernate-core-5.0.2.Final.jar:5.0.2.Final] 在 org.hibernate.internal.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:298) ~[hibernate-core-5.0.2.Final.jar:5.0.2.Final] 在 org.hibernate.internal.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:236) ~[hibernate-core-5.0.2.Final.jar:5.0.2.Final] 在 org.hibernate.internal.SessionImpl.createQuery(SessionImpl.java:1825) ~[hibernate-core-5.0.2.Final.jar:5.0.2.Final] 在 com.dso.dao.comptabilite.cegid.impl.ReferenceComptableSequenceDAOImpl.retrieveSequenceNumberForCegidGenerated

【问题讨论】:

  • As from hibernate document,"cast(... as ...), 其中第二个参数是 Hibernate 类型的名称," 尝试使用 'int' 而不是 INT 进行类型匹配
  • ... 或CAST(... AS integer)。请注意,Hibernate 类型区分大小写。

标签: java hql scrollableresults


【解决方案1】:

请更换

CAST(xxxx AS INT)

通过

CAST(xxxx AS int)

【讨论】:

    猜你喜欢
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 2013-07-25
    • 2014-02-24
    • 1970-01-01
    • 1970-01-01
    • 2021-09-23
    相关资源
    最近更新 更多