【问题标题】:How to call mysql function using querydsl?如何使用querydsl调用mysql函数?
【发布时间】:2014-05-23 22:35:57
【问题描述】:

我有点着急,所以我只想问一个关于 querydsl 的快速问题。根据我的研究,查询 dsl 不支持存储过程,但可以支持数据库功能。我的问题是我们如何使用 querydsl 调用这些数据库函数?

【问题讨论】:

  • 不会this article 回答你的问题吗?
  • 是的,我已经经历了很多时间。但基于当前版本的 querydsl,它已经过时了。
  • 我的错。考虑到我什么都没说:-)

标签: java sql hibernate jpa querydsl


【解决方案1】:

您可以使用基于 TemplateExpression 的任意 JPQL 语法注入到您的查询中。

例如

query.where(Expressions.booleanTemplate("func1({0}, {1})", arg1, arg2));

如果您使用 Hibernate 4.3 或任何其他符合 JPA 2.1 的提供程序,您可以使用 FUNCTION 语法来调用 SQL 函数https://bugs.eclipse.org/bugs/show_bug.cgi?id=350843

所以例子会变成

query.where(Expressions.booleanTemplate("function('func1', {0}, {1})", arg1, arg2)"));

【讨论】:

  • 哇.. 太巧了 timo.. 我刚刚看到并阅读了幻灯片.. 几乎所有内容都在其中,我需要知道.. 谢谢.. 我一定会尝试您的建议。 .
  • @Timo 我正在尝试这个,但我收到一个:org.hibernate.hql.internal.ast.QuerySyntaxException:意外的 AST 节点
  • 不错的一个。是否可以在一次调用中处理更多函数(嵌套内部函数)?
  • 所以...基本上... QueryDSL 不支持类型安全函数,尽管可以通过@NamedStoredProcedureQuery 提取类型。太伤心了。
  • 嗨,@renanleandrof,你解决问题了吗?我得到了同样的错误:unexpected AST node。我的代码:Expressions.booleanTemplate("FIND_IN_SET({0}, {1})", arg1, arg2)
【解决方案2】:

调用mysql函数示例find_in_set

query.where(Expressions.booleanTemplate("find_in_set({0}, {1}) > 0", 1, "1,2,3"));

'> 0' 是必须的,否则会抛出意外的 AST 节点

【讨论】:

    猜你喜欢
    • 2021-07-31
    • 2017-05-23
    • 1970-01-01
    • 1970-01-01
    • 2022-07-13
    • 2021-10-08
    • 2018-11-13
    • 2021-04-23
    • 1970-01-01
    相关资源
    最近更新 更多