【问题标题】:how to use string left function in hql如何在hql中使用字符串左函数
【发布时间】:2012-03-26 22:05:32
【问题描述】:

我有一个这样的 sql 查询

select column from table where path = left('INPUTSTRING', length(path));

并尝试像这样在 hql 中完成它,

  return session.createQuery("from Table where Path = left(:input, length(Path))").
                            query.setParameter("input", inputPath).
                            .list();

得到这样的错误

Caused by: org.hibernate.hql.ast.QuerySyntaxException: unexpected token: left near line 1

如何做到这一点? hql中对应的字符串函数是什么?有没有使用条件查询 API 的解决方案?

【问题讨论】:

  • 我不确定hbl是否支持left函数,尝试使用NamedNativeQueries。

标签: mysql sql hibernate hql criteria-api


【解决方案1】:

是的,left() 不受 MySQLDialect 支持。请参阅API docs 上的 HQL 支持函数列表。

现在你有两个选择。

  1. 使用session.createSQLQuery()方法。
  2. 通过扩展MySQLDialect 创建您自己的Dialect 类并在那里注册函数。这是在休眠论坛here 中讲述的,在博客文章here 中有很好的解释。

【讨论】:

  • 谢谢,我把左边的函数改成了substring(),还是用hql管理的。感谢您提供 api 文档参考。
【解决方案2】:

我不确定 HQL 是否为您执行此操作,但您可以使用 IQuery/session.CreateSQLQuery() 来使用原始 SQL 查询来填充映射实体。我从未将它用于子字符串,但将它用于聚合函数。查看 NHibernate 文档的第 13 章,看看是否适合您。您可以检查 Nhibernate 中可用的查询替换 - here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-04
    • 2012-08-18
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 2022-01-20
    • 2014-02-11
    相关资源
    最近更新 更多