MySQL DATE_ADD выдает ошибку Hibernate - PullRequest
0 голосов
/ 24 мая 2018

Я использую HQL с DATE_ADD (функция mysql), как показано ниже

String hql = 
        "select count(*) " +
        "from ProgramGroupEvent as eventLog " +
        "where eventLog.id= :id" +
        "and DATE_ADD( eventLog.eventDate, INTERVAL :interval MINUTE) > now()"; 


    long count = 0;

    try {
        count = ((Long)sess.createQuery( hql )
            .setLong( "id", id)
            .setInteger("interval", interval )
            .iterate().next()).longValue();

    } catch (HibernateException e) {
        e.printStackTrace();
    }

Но Hibernate выдает ошибку токена, как показано ниже

antlr.NoViableAltException: unexpected token: :
at org.hibernate.hql.internal.antlr.HqlBaseParser.identPrimary(HqlBaseParser.java:4016) ~[hibernate-core-4.1.7.Final.jar:4.1.7.Final]
at org.hibernate.hql.internal.antlr.HqlBaseParser.primaryExpression(HqlBaseParser.java:859) ~[hibernate-core-4.1.7.Final.jar:4.1.7.Final]
at org.hibernate.hql.internal.antlr.HqlBaseParser.atom(HqlBaseParser.java:3390) ~[hibernate-core-4.1.7.Final.jar:4.1.7.Final]

PS: я использую Hibernate 4.1.7

Ответы [ 2 ]

0 голосов
/ 25 мая 2018

Я провел дальнейшее исследование и выяснил проблему.Проблема в том, что Hibernate не может разобрать синтаксис.Как и ожидалось, это не правильно сформированный синтаксис HQL.https://forum.hibernate.org/viewtopic.php?f=1&t=982317&view=previous

Я исправил, заменив

DATE_ADD( eventLog.eventDate, INTERVAL :interval MINUTE) > now()"; 

на

time_to_sec(timediff( now() , eventLog.eventDate )) < :seconds"; 

Надеюсь, это может кому-то помочь

0 голосов
/ 24 мая 2018

Ваш запрос требует два параметра

  • pharmacyOid
  • интервал

Но в параметрах вашего запроса id и интервал .

Ваш запрос должен выглядеть так:

count = ((Long)sess.createQuery( hql )
        .setLong( "pharmacyOid", id)
        .setInteger("interval", interval )
        .iterate().next()).longValue();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...