如果对univarchar列使用LIKE条件,则Hibernate返回空结果(Sybase)

时间:2014-06-28 21:06:13

标签: sql hibernate unicode

假设我有一个表:Person(名称:univarchar),此表包含一行" abc"。 我使用Hibernate(Criteria API和HQL)搜索Person:

标准API:

Criteria c = session.createCriteria(Person.class);
c.add(Restrictions.ilike(name,"abc"));
return c.list();

HQL:

String query = "from Person where lower(name) like :name";
Query q = session.createQuery(query);
query.setString("name","abc");
return query.list();

返回空结果。但是,当我使用Sybase的Interactive SQL执行由Hibernate生成的SQL语句时,它会返回一行" abc"。

我找到了HQL案例的解决方案。这是使用rtrim函数:

String query = "from Person where lower(rtrim(name)) like :name";
...

但我的问题是我想使用Criteria API,我找不到任何方法来使用Criteria API修剪名称列。

谢谢,抱歉我的英语不好。

1 个答案:

答案 0 :(得分:0)

您是否尝试过此代码:

Criteria c = session.createCriteria(Person.class);
c.add(Restrictions.ilike(name,"abc",MatchMode.ANYWHERE));
return c.list();

如果这不起作用,那么Read this。它的相似之处只是他希望在Order时想要修剪Restrictions。{/ p>