简体   繁体   English

休眠-意外令牌:降低

[英]Hibernate - unexpected token: lower

I have to get all registers in my DB (PostgreSQL) with case-insesitive . 我必须使用case-insesitive获取数据库(PostgreSQL)中的所有寄存器。 I have tried with criteria but the ignoreCase() is not working for me (I'm using Hibernate 3.6). 我已经尝试过使用条件,但是ignoreCase()对我不起作用(我正在使用Hibernate 3.6)。

criteria.add(Restrictions.eq(TABLECODEID, tableCodeID).ignoreCase());

I have also tried to use the ilike method but still doesn't work. 我也尝试过使用ilike方法,但仍然无法正常工作。

criteria.add(Restrictions.ilike(TABLECODEID, tableCodeID));

And this version too: 这个版本也是:

criteria.add(Restrictions.ilike(TABLECODEID, tableCodeID, MatchMode.ANYWHERE));

So now I'm getting this error when I try to create a query in Hibernate with HQL: 所以现在当我尝试在带有HQL的Hibernate中创建查询时遇到此错误:

unexpected token: lower near line 1, column 81

My code looks like this: 我的代码如下所示:

StringBuffer queryString = new StringBuffer()
                    .append("from ListItem li ")
                    .append("where lower(li.tableCodeId) like :tableCodeId");

Query query = session.createQuery(queryString.toString());
query.setParameter("tableCodeId", tableCodeID.toLowerCase());

List<ListItem> listItemListAux = query.list();

What am I doing wrong? 我究竟做错了什么?

您应该以这种方式解决, MatchMode.ANYWHERE将解决问题:

criteria.add(Restrictions.ilike(TABLECODEID, tableCodeID, MatchMode.ANYWHERE));

最后,我使用了HQL,问题是我正在使用Lower(li.tableCodeId)函数攻击实体,我不得不使用DB列名Lower(tablecodeid)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM