休眠 - 意外标记:较低

Hibernate - unexpected token: lower

我必须使用 不区分大小写 获取我的数据库 (PostgreSQL) 中的所有寄存器。我试过标准,但 ignoreCase() 对我不起作用(我使用的是 Hibernate 3.6)。

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

我也试过用ilike方法还是不行

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

还有这个版本:

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

现在当我尝试使用 HQL 在 Hibernate 中创建查询时出现此错误:

unexpected token: lower near line 1, column 81

我的代码如下所示:

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();

我做错了什么?

你应该这样解决,MatchMode.ANYWHERE就可以了:

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

最后我使用了 HQL,问题是我在 lower(li.tableCodeId) 函数中攻击实体,我不得不使用数据库列名较低(表代码)