mysql date\u add抛出hibernate错误

jm2pwxwz  于 2021-06-23  发布在  Mysql
关注(0)|答案(2)|浏览(352)

我正在使用hql和date\u 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:我正在使用Hibernate4.1.7

j8yoct9x

j8yoct9x1#

我做了进一步的研究,发现了这个问题。问题是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";

希望这能对某些人有所帮助

col17t5w

col17t5w2#

您的查询需要两个参数
类药
间隔
但是在您的查询参数id和interval中使用。
您的查询应该如下所示:

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

相关问题