【问题标题】:Hibernate return empty result if using LIKE condition with univarchar columns (Sybase)如果使用带有 univarchar 列的 LIKE 条件,休眠返回空结果(Sybase)
【发布时间】:2014-06-28 21:06:12
【问题描述】:

假设我有一个表:Person(Name: 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 修剪名称列的任何方法。

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

【问题讨论】:

  • 你试过Restrictions.like(...)。为什么你使用ilike?你想做区分大小写的搜索..
  • 是的,这就是我使用 ilike 的原因。但是我已经尝试过 Restrictions.like(...) 并且它有同样的问题。

标签: sql hibernate unicode


【解决方案1】:

您是否尝试过使用此代码:

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

如果这不起作用,那么Read this。类似的只是他想修剪而Order你想修剪而Restrictions

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-12
    • 1970-01-01
    相关资源
    最近更新 更多