String Date в Именованном запросе генерирует ClassCastException - PullRequest
1 голос
/ 24 октября 2019

Я пытаюсь создать именованный запрос для всех строковых аргументов. Вот как мой строковый метод был:

    public Collection<Companypermcache> findExpiredPerms() {
        String date = DateUtils.getSQLDate(DateUtils.getToday());
        StringBuffer qbe = new StringBuffer("select cpc from Companypermcache cpc");
        qbe.append(" where cpc.expire < '"+date+"'");
        return super.findByQuery(qbe.toString());
    }

Я преобразую это в именованный запрос, как показано ниже

        String date = DateUtils.getSQLDate(DateUtils.getToday());
        StringBuffer qbe = new StringBuffer("select cpc from Companypermcache cpc");
        qbe.append(" where cpc.expire < :date");
        return super.findByQuery(qbe.toString(),"date",date);
    }

Но это генерирует

java.lang. ClassCastException: java.lang.String не может быть приведен к java.util.Date по адресу org.hibernate.type.descriptor.java.JdbcTimestampTypeDescriptor.unwrap (JdbcTimestampTypeDescriptor.java:24) в org.hibernate.type.TimeTordesDescript. .doBind (TimestampTypeDescriptor.java:48) в org.hibernate.type.descriptor.sql.BasicBinder.bind (BasicBinder.java:74) в org.hibernate.type.AbstractStandardBasicType.nullSafeSet (AbstractStandardBjasic) .25Thibernate.type. ...

Исключение.

Однако, если я обновлю именованный запрос, как показано ниже, у меня нетЭто исключение, и все выглядит хорошо.

        String date = DateUtils.getSQLDate(DateUtils.getToday());
        DateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd");
        Date edate = simpleDateFormat.parse(date);
        StringBuffer qbe = new StringBuffer("select cpc from Companypermcache cpc");
        qbe.append(" where cpc.expire < :date");
        return super.findByQuery(qbe.toString(),"date",edate);
    }

Однако я действительно не понял разницы и необходимости разбора. У меня есть много мест в моем проекте, где я использую getSQLDate (), поэтому я обеспокоенхочу ли я разобрать все эти даты? В дополнение к этому типу для редактирования в моей таблице есть DATETIME

Почему нам нужно анализировать дату, когда мы передаем дату в качестве аргумента для именованного запроса ???

...