【问题标题】:HQL String LEFTHQL 字符串 LEFT
【发布时间】:2014-02-11 03:08:28
【问题描述】:

如何使用 HQL 获取前 4 个字符与我的字符串匹配的记录?

这是我的 HQL 语句:

Query query = HibernateUtil.getSessionFactory().getCurrentSession().createQuery("from User where substring(user, 4) like :user");

query.setParameter("user", "John");

什么都不返回。但是,如果我在 MySQL 中重用 SQL 语句并将单词“substring”更改为LEFT,那么它会返回很多记录。

我也尝试在我的 HQL 中将“substring”替换为“left”,但是当我这样做时它给了我这个错误:

org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: LEFT

【问题讨论】:

标签: java mysql hibernate hql


【解决方案1】:

left 的等效项需要带有三个参数的 substring()。第二个是偏移量,第三个是字符数。因此,要获取前四个字符:

Query query = HibernateUtil.getSessionFactory().getCurrentSession().createQuery("from User where substring(user, 1, 4) like :user");

表达式substring(user, 4) 通常采用从第四个字符开始到字符串结尾的子字符串(我说“通常”是因为这是函数的典型行为,但我不知道 HQL 是否确实这样做)。

【讨论】:

    【解决方案2】:

    你不能用like和通配符来代替吗?

    Query query = HibernateUtil.getSessionFactory().getCurrentSession().createQuery(
    "from User u where u.user like :user");
    
    query.setString("user", "John%");
    

    否则,请执行native query

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多