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

Sql 如果对univarchar列(Sybase)使用LIKE条件,则Hibernate返回空结果,sql,hibernate,unicode,Sql,Hibernate,Unicode,假设我有一个表:Person(名称:univarchar),该表包含一行“abc”。 我使用Hibernate搜索Person(标准API和HQL): 标准API: Criteria c = session.createCriteria(Person.class); c.add(Restrictions.ilike(name,"abc")); return c.list(); HQL: 它返回空结果。然而,当我使用Sybase的交互式SQL执行Hibernate生成的SQL语句时,它返回一行“

假设我有一个表:Person(名称:univarchar),该表包含一行“abc”。 我使用Hibernate搜索Person(标准API和HQL):

标准API:

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

它返回空结果。然而,当我使用Sybase的交互式SQL执行Hibernate生成的SQL语句时,它返回一行“abc”

我找到了HQL案例的解决方案。这是为了使用rtrim功能:

String query = "from Person where lower(rtrim(name)) like :name";
...
但我的问题是我想使用CriteriaAPI,我找不到任何方法通过使用CriteriaAPI来修剪name列


感谢并为我糟糕的英语感到抱歉。

您是否尝试过以下代码:

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

如果这行不通的话。这很相似,只是他想在
命令时修剪
你想在
限制时修剪

你试过
限制吗。比如(…)
。为什么要使用
ilike
?你想进行区分大小写的搜索……是的,这就是我使用ilike的原因。但是我尝试过限制,比如(…),它也有同样的问题。
Criteria c = session.createCriteria(Person.class);
c.add(Restrictions.ilike(name,"abc",MatchMode.ANYWHERE));
return c.list();