[英]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.