Got IllegalArgumentException after hibernat upgrade

We are upgrading hibernate from 5.X to 6.3.1.Final. The following code was working fine with hibernate 5.x but got IllegalArgumentException with 6.X version. We have tested with 6.1.7.Final and 6.3.1.Final.

Full Exception:
java.lang.IllegalArgumentException: org.hibernate.query.sqm.produce.function.FunctionArgumentException: Parameter 2 of function ‘timestampdiff()’ has type ‘TEMPORAL’, but argument is of type ‘java.sql.Timestamp’
at org.hibernate.internal.ExceptionConverterImpl.convert(
at org.hibernate.internal.ExceptionConverterImpl.convert(
at org.hibernate.internal.ExceptionConverterImpl.convert(


  private List<CusRawCmfDataEntity> getNotRxedRawCmfData(
      OtaPathId otaPathId,
      long startTime,
      long endTime,
      List<Priority> priorities,
      List<String> origAddrs) {
    if (endTime < startTime) {
      return Collections.emptyList();

    long queryStartTime = System.nanoTime();

    if (CollectionUtil.isNullOrEmpty(priorities)) {
      priorities = Arrays.asList(Priority.p1ToP4Values());

    StringBuilder query = new StringBuilder();

    // Initial part of the query based on the database type
    query.append("SELECT r FROM CusRawCmfData r WHERE IN ( ");
    query.append("SELECT FROM CusMetaData u LEFT JOIN CmfData m ON (");
    query.append("u.otaPathId=m.otaPathId AND u.originator=m.originator AND ");
    query.append("u.msgNum=m.msgNumber AND u.msgType=m.msgType AND u.toi=m.toi ");

    // Time comparison based on the database type
    if (dmeAppSettings.isPostgresqlDatabase()) {
          "AND ABS(date_part('epoch', u.timeOfEntry) - date_part('epoch', m.rptTimeOfEntry)) < 5) ");
    } else if (dmeAppSettings.isH2Database()) {
      query.append("AND DATEDIFF(SECOND, u.timeOfEntry, m.rptTimeOfEntry) < 5) ");
    } else {
      query.append("AND u.timeOfEntry=m.rptTimeOfEntry) ");

    // Continuing common part of the query
        "WHERE u.otaPathId = :cibId AND u.timeOfExit BETWEEN :startTime AND :endTime AND u.priority IN :priorities ");

    // If originator addresses are not empty
    if (!CollectionUtil.isNullOrEmpty(origAddrs)) {
      query.append("AND u.originator IN :origAddrs ");

    query.append("AND IS NULL)");

    TypedQuery<CusRawCmfDataEntity> q =
            .createQuery(query.toString(), CusRawCmfDataEntity.class)
            .setParameter("startTime", startTime)
            .setParameter("endTime", endTime)
            .setParameter("cibId", otaPathId)
            .setParameter("priorities", priorities);
    if (!CollectionUtil.isNullOrEmpty(origAddrs)) {
      q.setParameter("origAddrs", origAddrs);
    List<CusRawCmfDataEntity> result = q.getResultList();

    log.debug("getNotRxedRawCmfData took "
        + TimeUnit.NANOSECONDS.toMillis(System.nanoTime() - queryStartTime)
        + " ms.");
    return result;

Time fields are long type and mapped to SQL timestamp.

  @Convert(converter = LongToTimestampConverter.class)
  @Column(name = "tmEn")
  protected long timeOfEntry;

I got the error when testing with H2 database. Function “datediff” triggered the exception.
How to fix this issue?

This looks like a bug. Please create an issue in the issue tracker( with a test case( that reproduces the issue.