mysql 第1行附近的间期:原因是:组织,休眠,hql,内部,ast,查询语法异常

h9a6wy2h  于 2023-03-11  发布在  Mysql
关注(0)|答案(3)|浏览(103)

导致错误的原因:org. hib. hql.internal.ast.查询语法异常:意外标记:间期接近
下面是我的疑问:

private static final String USERS_NOT_ACTION_IN_LAST_MONTH = select u from myTable u where u.lastDate + INTERVAL 30 DAY <= CURDATE();

 @Override
 public List<MyEntity> getItemOlderThanMonth() {
    Query q = _entityManager.createQuery(USERS_NOT_ACTION_IN_LAST_MONTH, MyEntity.class);
    return q.getResultList();
 }

我想获取超过30天的记录。

wlzqhblo

wlzqhblo1#

可以通过查询参数(current_date- 30)计算当前日期

private static final String USERS_NOT_ACTION_IN_LAST_MONTH = select u from myTable u where u.lastDate <= :calculated_date;

其中,计算日期=当前日期-30天。

chy5wohz

chy5wohz2#

通过使用_entityManager.createQuery创建了hibsql(hql)脚本,并且hib没有INTERVAL关键字。
但是createNativeQuery是原生SQL,行为和普通SQL脚本一样。所以对于mysql,db INTERVAL关键字应该可以工作。所以smth是这样的

_entityManager.createNativeQuery("select * from myTable u where u.lastDate + INTERVAL 30 DAY <= CURDATE()");
vwkv1x7d

vwkv1x7d3#

@ARPAN CHAKARVARTY的回答帮助我找到了我需要的东西。下面是我的Groovy代码。

final int DELETE_OLDER_THAN = 90

 Map restrictions = [date: new Date() - DELETE_OLDER_THAN]
        String query = """select a
                           from history a
                           where date <= :date
                        """
        List<History> histories = History.executeQuery(
                query, restrictions, [max: 100, offset: null])

相关问题